Kubernetes Ingress是否支持微服务间内部请求及SSL通信?
1. Ingress 是否支持内部请求代理?
完全可以。Ingress 本质是基于 HTTP/HTTPS 的路由规则组件,核心由 Ingress Controller 实现流量转发——只要集群内的 Pod 能访问到 Ingress Controller 的服务(比如配置为 ClusterIP 类型),就能通过 Ingress 代理微服务之间的内部请求,并不局限于外部流量。
2. 不用服务网格,如何用 Ingress 实现微服务间 SSL 通信?
这里提供一套轻量方案,以 Nginx Ingress Controller 为例(其他主流 Controller 逻辑类似):
将 Ingress Controller 改为 ClusterIP 类型
默认很多 Ingress Controller 会部署为 LoadBalancer/NodePort,改成 ClusterIP 后仅集群内部可访问,避免外部暴露。修改对应的 Service 配置:apiVersion: v1 kind: Service metadata: name: nginx-ingress-controller spec: type: ClusterIP # 替换原类型 ports: - name: https port: 443 targetPort: https selector: app: nginx-ingress配置内部服务的 Ingress 规则
为每个需要被内部调用的微服务配置 Ingress,使用内部自定义域名(比如user-service.internal),并关联对应的后端 Service:apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: user-service-ingress annotations: nginx.ingress.kubernetes.io/ssl-redirect: "true" spec: tls: - hosts: - user-service.internal secretName: internal-tls-secret # 关联SSL证书Secret rules: - host: user-service.internal http: paths: - path: / pathType: Prefix backend: service: name: user-service port: number: 8080创建内部 SSL 证书 Secret
用自签证书或内部 CA 签发的证书创建 Secret:kubectl create secret tls internal-tls-secret --cert=./internal-cert.pem --key=./internal-key.pem微服务内部调用配置
微服务之间调用时,直接使用 Ingress 定义的内部域名 + HTTPS 协议,比如https://user-service.internal/api/users。如果集群内没有自动解析自定义域名的 DNS 服务,可以:- 在 CoreDNS 中添加自定义域解析,指向 Ingress Controller 的 ClusterIP;
- 或者在 Pod 的
hostAliases里配置域名与 Ingress Controller IP 的映射。
额外说明
如果需要端到端 SSL(Ingress 不终止 SSL,直接将加密流量转发到后端服务),可以给 Ingress 添加注解:
metadata: annotations: nginx.ingress.kubernetes.io/ssl-passthrough: "true"
这种情况下,后端服务需要自行处理 SSL 证书,Ingress 仅做四层转发。
内容的提问来源于stack exchange,提问作者CraZyCoDer

