第9章 Kubernetes网络之Ingress
• Ingress为弥补NodePort不足而生
• Pod与Ingress的关系
• Ingress Controller
• Ingress 规则配置
9.1 Ingress为弥补NodePort不足而生
NodePort存在的不足:
• 一个端口只能一个服务使用,端口需提前规划
• 只支持4层负载均衡
9.2Ingress是什么
Ingress:Ingress公开了从集群外部到集群内服务的http和https路由的规则集合,而具体实现流量路由则是由Ingress Controller 负责。
Ingress:k8s中的一个抽象资源,给管理员提供一个暴露应用的入口定义方法。
Ingress Controller:根据Ingress生成具体的路由规则,并对pod负载均衡。
9.3 Ingress Controller
Ingress管理的负载均衡器,为集群提供全局的负载均衡能力。
使用流程:
- 部署Ingress Controller
- 创建Ingress 规则
9.4Ingress Controller部署方式
ngress Controller有很多实现,我们这里采用官方维护的Nginx控制器。 项目地址:https://github.com/kubernetes/ingress-nginx 下载YAML:wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx- 0.30.0/deploy/static/mandatory.yaml (课件中名称是ingress-controller.yaml) 修改YAML: • 镜像地址修改成国内的:lizhenliang/nginx-ingress-controller:0.30.0 • 将Ingress Controller暴露,一般使用宿主机网络(hostNetwork: true)或者使用NodePort 其他控制器:https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/
9.5 Ingress 规则配置
创建:
kubectl apply -f xxx.yaml
查看:
kubectl get ingress
测试:本地电脑绑定hosts记录对应ingress里面配置的域名
例:<Ingress Controller Pod所在Node IP> web.aliangedu.cn
[root@k8s-master1 k8s-work]# cat ingress.yaml apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: aliangedu spec: rules: - host: web.aliangedu.cn http: paths: - path: / pathType: Prefix backend: service: name: web port: number: 80 ############ [root@k8s-master1 k8s-work]# kubectl get pod -n ingress-nginx NAME READY STATUS RESTARTS AGE nginx-ingress-controller-qzzz5 1/1 Running 2 19h ############## [root@k8s-master1 k8s-work]# kubectl get ingress NAME CLASS HOSTS ADDRESS PORTS AGE aliangedu <none> web.aliangedu.cn 80 19h 在host文件中配置相应域名节点的ip和域名访问 ######################### [root@k8s-master1 k8s-work]# kubectl get ep NAME ENDPOINTS AGE kubernetes 192.168.31.71:6443 2d8h nginx 10.244.36.91:80 2d8h web 10.244.36.92:8080 28h
9.6 Ingress 规则配置:https
1.准备域名证书文件(来自:openssl/cfssl工具自签或者权威机构颁发) 解压: cfssl.tar.gz [root@k8s-master1 ssl]# cp cfssl /usr/bin/ [root@k8s-master1 ssl]# cp cfssl-certinfo /usr/bin/ [root@k8s-master1 ssl]# cp cfssljson /usr/bin/ 生成证书: bash certs.sh 2.将证书文件保存到Secret kubectl create secret tls web-aliangedu-cn --cert=web.aliangedu.cn.pem --key=web.aliangedu.cn-key.pem [root@k8s-master1 k8s-work]# kubectl get secret 3、Ingress规则配置tls [root@k8s-master1 k8s-work]# cat ingress-https.yaml apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: aliangedu-https spec: tls: - hosts: - web.aliangedu.cn secretName: web-aliangedu-cn rules: - host: web.aliangedu.cn http: paths: - path: / pathType: Prefix backend: service: name: web port: number: 80 查看创建的https域名: [root@k8s-master1 k8s-work]# kubectl get ingress NAME CLASS HOSTS ADDRESS PORTS AGE aliangedu <none> web.aliangedu.cn 80 19h aliangedu-https <none> web.aliangedu.cn 80, 443 16m 然后浏览器登录验证:https://web.aliangedu.cn 小结: Ingress Controller怎么工作的? root@k8s-master1 ssl]# kubectl get pods -n ingress-nginx NAME READY STATUS RESTARTS AGE nginx-ingress-controller-qzzz5 1/1 Running 2 19h [root@k8s-master1 ssl]# kubectl exec -it nginx-ingress-controller-qzzz5 -n ingress-nginx -- bash bash-5.0$ ps -ef PID USER TIME COMMAND 1 www-data 0:00 /usr/bin/dumb-init -- /nginx-ingress-controller --configmap=ingress-nginx/nginx-co 7 www-data 3:42 /nginx-ingress-controller --configmap=ingress-nginx/nginx-configuration --tcp-serv 26 www-data 0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /etc/nginx/nginx.conf
9.7Ingress Controller怎么工作的
Ingress Controller通过与kubernetes API交互,动态的去感知集群中Ingress规则变化,然后读取它,按照自定义的规则,规则就是写明了那个域名对应那个Service,生成一段Nginx配置,应用到管理的Nginx服务,然后热加载生效。
以此来达到nginx负载均衡器配置及动态更新的问题。
流程包流程:客户端 ->Ingress Controller(nginx) -> 分布在各节点Pod
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!