【发布时间】:2021-02-03 20:54:43
【问题描述】:
我想通过以下方式拆分 Kubernetes Nginx 中的传入流量:
Client --> Nginx --> {Service A, Service B}
我面临的问题是服务 A 是内部服务,不支持 HTTPS,因此应该终止服务 A 的 SSL。另一方面,服务 B 是外部服务(托管在 example.com 上)并且只能工作通过 HTTPS。
我无法使用 Kubernetes Nginx 轻松完成这项工作。这是我带来的:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-proxy
annotations:
nginx.ingress.kubernetes.io/backend-protocol: HTTPS
nginx.ingress.kubernetes.io/upstream-vhost: example.com
spec:
tls:
- hosts:
- proxy.com
secretName: secret
rules:
- host: proxy.com
http:
paths:
- path: /api/v1/endpoint
backend:
serviceName: service-a
servicePort: 8080
- path: /
backend:
serviceName: service-b
servicePort: 443
种类:服务 api版本:v1 元数据: 名称:服务-b 命名空间:默认 规格: 类型:外部名称 外部名称:service-b.external 端口: - 端口:443
我有一条service-b.external:443 指向 example.com 的路线。
此解决方案仅在 service-b 通过 HTTPS 时才有效,但在我的情况下,由于其他一些内部依赖关系,我无法将此服务更改为 HTTPS。
我的问题是 backend-protocol 注释适用于整个类型,我无法为每个路径定义它。
P.S:我正在使用 AWS 提供商
【问题讨论】:
-
我很确定拥有两个
Ingress资源是完全有可能的,也是合理的,一个带有backend-protocol:注释,另一个没有; Ingress 控制器合并整个集群中的所有 Ingress 资源并获得最具体的胜利(因此/api/v1/endpoint将被路由到 service-a 并且如果其 Ingress 资源没有注释,它将默认使用 HTTP) -
@mdaniel 它如何与单个主机一起工作:proxy.com?两者都将指向同一个地址。 ingress 是否支持同一主机的两个项目?
标签: nginx kubernetes kubernetes-ingress