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
相关产品推荐
相关产品推荐

