通过地址重写, 解决ingress在使用非标准端口(80, 443)时, 引起的重定向丢失端口问题
Posted 李昊轩的博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过地址重写, 解决ingress在使用非标准端口(80, 443)时, 引起的重定向丢失端口问题相关的知识,希望对你有一定的参考价值。
最近在搭建私有云k8s集群时, 由于一些安全原因, 没有使用标准端口(80, 443), 发现已部署在pod中的项目出现了重定向丢失端口的问题, 经过排查, 发现本质上不是丢失了端口, 而是默认重定向到了标准端口, http的重定向会默认到80, https会重定向到443端口, 下面我分享一下自己的解决方案:
简单来说, 要实现ingress在非标准端口正常工作, 要保证以下几个结果, 这里我们以30052
代替80, 30054
代替443
- ingress-controller 的pod 需要工作在指定的端口
需要再deployment的 arg属性中加入:
- '--http-port=30052'
- '--https-port=30054'
- ingress的svc需要根据指定30052端口来对接ingress pod的 30052端口
- svc 改造
spec:
ports:
- name: http
protocol: TCP
port: 30052
targetPort: 30052
nodePort: 30052
- name: https
protocol: TCP
port: 30454
targetPort: 30454
nodePort: 30454
selector:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
- 开启端口地址重写:
nginx.ingress.kubernetes.io/use-port-in-redirects: "true"
通过以上操作, 我们的ingress就可以实现工作在非标准端口了, 并且业务pod在重定向的时候, 端口重写保证了不会丢失端口.
以上是关于通过地址重写, 解决ingress在使用非标准端口(80, 443)时, 引起的重定向丢失端口问题的主要内容,如果未能解决你的问题,请参考以下文章
企业运维实战--k8s学习笔记 通过Ingress-nginx实现k8s七层负载均衡Ingress加密认证以及地址重写
企业运维实战--k8s学习笔记6.Ingress加密认证以及地址重写