2020-08-03 Ingress(暴露应用对外访问的最佳方
2020-08-05 本文已影响0人
阿丧小威
1. Pod与Ingress的关系
- 通过service相关联
- 通过Ingress Controller实现Pod的负载均衡
- 支持TCP/UDP 4层和HTTP 7层
2. IngressController
图片.png1.部署Ingress Controller
2.创建Ingress规则
Ingress Controller有很多实现,我们这里采用官方维护的Nginx控制器。
Github:https://github.com/kubernetes/ingress-nginx
部署:kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/mandatory.yaml
注意事项:
- 镜像地址修改成国内的:lizhenliang/nginx-ingress-controller:0.30.0
- 建议直接宿主机网络暴露:hostNetwork: true ---使用宿主机的网络,确保80和443暴露到node上
-除了官网的,使用预先定义好的yaml
其他主流控制器:
Traefik:HTTP反向代理、负载均衡工具
Istio:服务治理,控制入口流量
3. Ingress HTTP网站测试
准备yaml文件simple-fanout-example.yaml
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: example-ingress
spec:
rules:
- host: example.ctnrs.com ---配置域名(域名记得解析到服务器)
http:
paths:
- path: /
backend:
serviceName: web ---service的名称
servicePort: 80 ---clauster IP端口(应用的端口,例如nginx默认是80)
执行kubectl apply -f simple-fanout-example.yaml
创建。
kubectl get ingress
查看创建的ingress对象。
然后我们使用http://foo.bar.com 就可以访问服务了。
4. Ingress HTTPS网站测试
首先我们要准备好使用的ssl证书;自签或购买的都是可以的。我们使用自签方式进行演示。
自签证书在前面高可用集群教程https://www.jianshu.com/writer#/notebooks/33131248/notes/72493644/preview里面第5步的域名替换成我们想要颁发的即可。
kubectl get secert
查看我们创建的数字信息。
为ingress-https.yaml设置证书
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: tls-example-ingress
spec:
tls:
- hosts:
- sslexample.ctnrs.com
secretName: sslexample-ctnrs-com ---证书名
rules:
- host: sslexample.ctnrs.com
http:
paths:
- path: /
backend:
serviceName: my-service
servicePort: 80
执行kubectl apply -f ingress-https.yaml
创建。
通过htts://sslexample.ctnrs.com即可访问。
5. Ingress主要功能
- 支持4层、7层负载均衡
- 支持独定义service访问策略
- 只支持基于域名的网站访问
- 支持tls
6. 故障排查
Ingress工作原理 图片.png- kubectl logs type/name #查看容器日志
- kuberctl describe type/name #查看容器详细描述
- kubectl exec -it POD [-c CONTAINER] -- COMMAND [args...] #进入容器内部查看