通过地址重写, 解决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加密认证以及地址重写

k8s资源对象-ingress通俗理解及配置使用

ingress 路由地址重写与规则解释

k8sIngress(部署,域名访问,加密,认证,地址重写)

H3C端口聚合中的 both ingress区别在哪,要详细的,谢谢