工作笔记 · 2023年7月7日 0

k8s Ingress-nginx

这两天在学习 kubernetes 的 nginx版本 ingress,参考一个哔哩哔哩视频,安装成功,视频有一个小时,默认安装,老师给了自己的两个pod用于测试ingress的转发机制,都是基于80端口 ,基本还算顺利,但是思考的点在于更换端口 ,是更换 ingress congtroller 的端口 还是 controller的 service的端口?

懒得说自己摸索过程,说结果吧

软件版本

K8S:1.20.15 。。。DOCKER:18.09.4(C/S)…INGRESS-NGINX controller :v 1.3.0

辅助验证:nginx:latest (后端pod)

要求

1.kubernetes 能够 指定一个虚拟ip,并且 controller 可以 动态部署在 任意 node上或者指定node上面

2.外网通过指定端口 访问 进入,可以访问各个后端service

操作过程

1.哔哩哔哩视频已经完成了 要求的第一个点,核心要素是 修改 ingress-nginx-controller 官方yaml文件里面的类型是 loadbanlancer的 service ,改动地方如下

---
apiVersion: v1
kind: Service
metadata:
  labels:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
    app.kubernetes.io/version: 1.3.0
  name: ingress-nginx-controller
  namespace: ingress-nginx
spec:
  externalTrafficPolicy: Cluester ##原来为 Local
  externalIPs: ['192.168.2.136']  ##指定一个没有使用的ip,,原来没有 这个地方定义的ip,属于loadbalancer 集群ip,可以在 任意的节点,master or node 挂载这个ip,或者用keepalived实现
  #externalTrafficPolicy: Local 
  ports:
  - appProtocol: http
    name: http
    port: 80              #访问入口的端口,可修改为其他端口 ,controller的 port不用改
    protocol: TCP
    targetPort: http
  - appProtocol: https
    name: https
    port: 443
    protocol: TCP
    targetPort: https
  selector:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
  type: LoadBalancer



这次挂载虚拟ip,没有用 keepalived ,采用的是 在某个 node 上面或者 master上面 网卡添加一个 ip

使用 ip a a dev {IP ADDRESS} ….具体去问chatgpt

针对第二点要求实现

只需要修改 controller 的 service 端口即可,controller pod的 端口不必修改

所以 ingress 给出访问路径的方式是 user—–controller service{指定端口}—-controller{默认端口}—–ingress rules{转发pod的service的端口}—-{POD SERVICE}–{POD}

这里后端应用的pod ,service的端口和pod的端口一致,service映射pod的端口也是一致,这个做的思路唯一想到的好处是,便于管理,不用总是分不清 到底有没有设定争取把 POD 的端口 转发到了service