这两天在学习 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