第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管理的负载均衡器,为集群提供全局的负载均衡能力。

使用流程:

  1. 部署Ingress Controller
  2. 创建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

 

posted @   逆风飞翔的博客  阅读(18)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
点击右上角即可分享
微信分享提示