一、Ingress作用
对于Kubernetes的Service,无论是Cluster-Ip和NodePort均是四层的负载,集群内的服务如何实现七层的负载均衡,这就需要借助于Ingress;Ingress-nginx是7层的负载均衡器 ,同时负责统一管理外部对k8s cluster中Service的请求。
二、部署Ingress
1、下载对应的yaml文件
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/mandatory.yaml
2、修改对应的位置
3、创建ingress应用
4、查看ingress创建的资源信息
三、把当前myblog应用通过ingress发布(svc)对外访问
1、查看当前myblog 的svc
2、编写ingress的yaml文件
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: myblog
namespace: kang #命名空间必须要与svc一致
spec:
rules:
- host: myblog.cedarhd.com #对外发布的域名(等同于nginx多主机头)
http:
paths:
- path: / #匹配路径
backend:
serviceName: myblog #上面图片svc对应的名称
servicePort: 80 #上面图片svc的端口
3、通过yaml文件,创建ingress规则
4、从外部通过myblog.cedarhd.com访问
四、基于以上情况,发布一个安全的访问协议
1、通过公司的购买的域名证书,新建securt
#此方法保护私钥的敏感机密信息
2、创建发布htts的ingress规则
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: myblog
namespace: kang
spec:
rules:
- host: myblog.cedarhd.com
http:
paths:
- path: /
backend:
serviceName: myblog
servicePort: 80
tls:
- hosts:
- myblog.cedarhd.com
secretName: https-secret
3、创建secret与查看信息
4、通过浏览器验证是否成功
五、Ingress转发规则的使用技巧
1、多路径转发
#目标
myblog.luffy.com -> 192.168.136.10 -> /foo service1:4200
/bar service2:8080
/ myblog:80
#实现
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: simple-fanout-example
namespace: luffy
spec:
rules:
- host: myblog.luffy.com
http:
paths:
- path: /foo
backend:
serviceName: service1
servicePort: 4200
- path: /bar
backend:
serviceName: service2
servicePort: 8080
- path: /
backend:
serviceName: myblog
servicePort: 80
2、URL重写
目标:
myblog.luffy.com -> 192.168.136.10 -> /foo/ myblog:80/admin/
实现:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: rewrite-path
namespace: luffy
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /admin/$1
spec:
rules:
- host: myblog.luffy.com
http:
paths:
- path: /foo/(.*)
backend:
serviceName: myblog
servicePort: 80