深入理解 Ingress
Ingress为弥补NodePort不足而生
NodePort一些不足:
• 一个端口只能一个服务使用,端口需提前规划
• 只支持4层负载均衡
nginx 动态感知pod ip 的变化,根据变化动态设置nginx 的upstream,并实现负载均衡
ingress controller 动态刷新 pod ip 列表 更新到 nginx 的配置文件
Pod与Ingress的关系
通过Service相关联
通过Ingress Controller实现Pod的负载均衡 - 支持TCP/UDP 4层和HTTP 7层
Ingress Controller
1. 部署Ingress Controller
Nginx:官方维护的Ingress Controller
部署文档:https://github.com/kubernetes/ingress-nginx/blob/master/docs/deploy/index.md
注意事项:
• 镜像地址修改成国内的:registry.aliyuncs.com/google_containers/nginx-ingress-controller:0.26.1
• 使用宿主机网络:hostNetwork: true
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/mandatory.yaml
mandatory.yaml 里一共有3个configmap 一个是配置七层的,二个是配置四层的分别对应udp tcp
从apiserver 动态获取 endpoint ,从apiserver访问就必须授权,就需要创建serviceaccount,仅仅获取ip 列表,所以授予的权限 查看即可。
由于国外的镜像往往不能被 很好d 拉取。
更换配置中的默认镜像地址registry.cn-hangzhou.aliyuncs.com/benjamin-learn//nginx-ingress-controller:0.20.0
hostNetwork 字段和 container 一个层级
hostNetwork: true
创建ingress-controller 发现pod 起不来
报错提示1:
Error generating self-signed certificate: could not create temp pem file /etc/ingress-co
ntroller/ssl/default-fake-certificate.pem: open /etc/ingress-controller/ssl/default-fake-certificate.pem797363033: permission denied
解决方法:
原因:随着版本提高,安全限制越来越高,对于权限的管理也越来越精细
node节点分别 chmod -R 777 /var/lib/docker 授权任意用户有docker临时文件的任意权限
完整 ingress-controller的 yaml
mandatory.yaml
apiVersion