Kubernetes(二十一)Intergress
- Ingress是什么?
- 之前我们了解到NodePort、LoadBalancer两种方法可以让pod暴露给外部访问,并且通过NodePort我们需要提前规划端口,避免应用越来越来越多的时候变得端口难以分配管理;并且每一个service都会创建一个负载均衡服务,导致成本比较高。那么有没有一种可以提供全局负载均衡器呢?那么kubernetes采用ingress来实现。
- ingress公开了从集群外部访问到集群内部serivced的http和https路由。路由流量由ingress资源上定义规则控制。
internet | [ Ingress ] --|-----|-- [ Services ]
- Ingress不会公布任意端口或协议,将http和https以外的服务公开到internet时,通常使用service.Type=NodePort或者service.Type=LoadBalancer
- ingress通过URL、域名将请求转发到不同的service,支持tcp/UDP 4层、7层负责均衡。ingress是访问规则的集合,具体是由ingress Controller(ingress Controller是在node上运行) 实现Pod的负责均衡。
- 环境准备
- ingress 控制器 部署文档 https://github.com/kubernetes/ingress-nginx/blob/master/docs/deploy/index.md
- kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.28.0/deploy/static/mandatory.yaml
- 镜像是国外的,需要更换到国内镜像
- hostNetwork:true #使用宿主机的网络,确保80和443暴露到node上
- 除了官网的,使用我们定义好的yaml
- kubectl get pods -n ingress-nginx -o wide#查看部署情况
- Ingress HTTP
- 准备simple-fanout-example.yaml
-
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: simple-fanout-example annotations: nginx.ingress.kubernetes.io/rewrite-target: / spec: rules: - host: foo.bar.com #配置域名(域名记得解析到服务器) http: paths: - path: /foo backend: serviceName: service1 #service的名称 servicePort: 4200 #clauster IP端口(应用的端口,例如nginx默认是8080) - path: /bar backend: serviceName: service2 servicePort: 8080
kubectl apply -f simple-fanout-example.yaml #执行创建
kubectl get ingress #查看创建的ingress对象
然后我们使用http://
foo.bar.com/foo:4200 就可以访问服务了
- Ingress HTTPS
- 首先我们要准备好使用的ssl证书;自签或购买的都是可以的。我们使用自签方式进行演示
- 自签证书教程 https://www.cnblogs.com/TSir/p/12213175.html 里面的域名替换成我们想要颁发的即可
- 创建 tls.yaml
apiVersion: v1 kind: Secret metadata: name: testsecret-tls namespace: default data: tls.crt: foo.bar.com.pem
tls.key: foo.bar.com-key .pem
type: kubernetes.io/tls - kubectl get secert #查看我们创建的数字信息
- 为simple-fanout-example.yaml设置证书
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: tls-example-ingress spec: tls: - hosts: - foo.bar.com
secretName: testsecret-tls rules: - host: sslexample.foo.com http: paths: - path: / backend: serviceName: service1 servicePort: 80 通过htts://
foo.bar.com即可访问
- Ingress 主要功能
- 支持4层、7层负载均衡
- 支持独定义service访问策略
- 只支持基于域名的网站访问
- 支持tls