You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kubernetes:配置Ingress通过HTTPS与集群内部服务通信

嘿,这个问题我在日常K8s运维里碰到过好多次,咱们把事儿说透:

核心结论

集群内部服务用HTTP确实是比较普遍的常规操作,但如果你需要Ingress通过HTTPS和后端ABC服务通信,完全可以通过配置实现,不是非得用HTTP不可。

为什么默认Ingress走HTTP?
  • 绝大多数Ingress Controller(比如最常用的NGINX Ingress)默认都会用HTTP协议转发流量到后端Service,原因很简单:集群内部网络一般是可信环境,HTTP足够满足需求,而且配置起来更省心。
  • 你遇到的问题本质就是:关了ABC的HTTP端口后,Ingress Controller还在傻乎乎地用HTTP去连后端,自然就连接失败了。
怎么配置让Ingress用HTTPS访问后端?

以NGINX Ingress为例,只需要两步关键配置:

1. 确保后端Service正确暴露HTTPS端口

先把你的Service配置里加上HTTPS端口的映射,比如假设ABC的HTTPS监听端口是443:

apiVersion: v1
kind: Service
metadata:
  name: abc-service
spec:
  selector:
    app: abc
  ports:
    - name: https
      protocol: TCP
      port: 443
      targetPort: 443 # 对应ABC服务实际监听的HTTPS端口

2. 在Ingress资源里添加注解指定后端协议

给Ingress加上nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"注解,告诉Controller:“别用HTTP了,跟后端聊HTTPS!” 调整后的Ingress YAML大概是这样:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: abc-ingress
  annotations:
    nginx.ingress.kubernetes.io/backend-protocol: "HTTPS" # 这行是关键!
    # 你原来的其他注解(比如cert-manager的证书配置)可以保留
spec:
  tls:
    - hosts:
        - your-domain.com
      secretName: abc-tls-secret # 这是对外提供HTTPS的证书,和后端的证书没关系
  rules:
    - host: your-domain.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: abc-service
                port:
                  name: https # 对应Service里定义的https端口名

额外注意:后端证书的信任问题

  • 如果ABC用的是自签名证书,Ingress Controller默认会因为证书不被信任而拒绝连接。这时候需要加个注解关闭证书验证:nginx.ingress.kubernetes.io/backend-ssl-verify: "false"。
  • 如果是正规CA签发的证书,Controller默认会信任,不用额外操作。
要不要在集群内部用HTTPS?

这个完全看你的安全需求:

  • 如果你的服务处理敏感数据,或者集群内部存在不可信的组件(比如多租户场景),那内部用HTTPS是很有必要的。
  • 如果集群是完全可信的单租户环境,用HTTP能减少配置复杂度,性能也会略好一丢丢。

内容的提问来源于stack exchange,提问作者nish1013

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:19:21