Kubernetes Nginx入口部分ssl终止
我想通过以下方式分割Kubernetes Nginx中的传入流量:Kubernetes Nginx入口部分ssl终止,nginx,kubernetes,kubernetes-ingress,Nginx,Kubernetes,Kubernetes Ingress,我想通过以下方式分割Kubernetes Nginx中的传入流量: Client --> Nginx --> {Service A, Service B} 我面临的问题是服务A是一个内部服务,不支持HTTPS,因此应该终止服务A的SSL。另一方面,服务B是一个外部服务(托管在example.com上),并且只在HTTPS上工作 我无法通过Kubernetes Nginx轻松完成这项工作。以下是我带来的: apiVersion: extensions/v1beta1 kind: In
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
种类:服务
版本:v1
元数据:
姓名:服务-b
名称空间:默认值
规格:
类型:ExternalName
外部名称:服务-b
端口:
-港口:443
我已经找到了一条指向example.com的service-b.external:443的路线
此解决方案仅在service-b通过HTTPS时有效,但在我的情况下,由于其他一些内部依赖关系,我无法更改此服务的HTTPS
我的问题是后端协议
注释适用于所有类型,并且我无法为每个路径定义它
附言:我正在使用AWS提供商遵循建议的解决方案和评论中的问题
是的,如下文所述,可能有两个入口项目。就你而言
只有一个应该有后端协议
根据nginx入口文件:
基本用途-基于主机的路由
ingress nginx可用于各种云提供商内部的许多用例,并支持许多配置。在本节中,您可以找到一个常见的使用场景,其中由ingress nginx提供动力的单个负载平衡器将根据主机名将流量路由到2个不同的HTTP后端服务
首先,按照说明安装ingress nginx。然后假设您需要公开已经安装的两个HTTP服务:myserviceca
,myserviceceb
。假设您想在myservicecea.foo.org
公开第一个,在myserviceceb.foo.org
公开第二个。一种可能的解决方案是创建两个入口资源:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress-myservicea
annotations:
# use the shared ingress-nginx
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- host: myservicea.foo.org
http:
paths:
- path: /
backend:
serviceName: myservicea
servicePort: 80
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress-myserviceb
annotations:
# use the shared ingress-nginx
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- host: myserviceb.foo.org
http:
paths:
- path: /
backend:
serviceName: myserviceb
servicePort: 80
应用此yaml时,将创建2个入口资源,由入口nginx实例管理。Nginx配置为使用kubernetes.io/ingres.class:“Nginx”
注释自动发现所有入口。请注意,入口资源应放置在后端资源的同一命名空间中
在许多云提供商上,ingress nginx还将创建相应的负载平衡器资源。您所要做的就是获取外部IP,并在DNS提供商内部添加一条DNS记录,将myservicecea.foo.org和myserviceceb.foo.org指向nginx外部IP。通过运行以下命令获取外部IP:
kubectl获取服务-n入口nginx
也可以像前面提到的那样拥有单独的nginx类。我非常确定,拥有两个入口
资源是完全可能的,也是合理的,一个是用后端协议注释的:
,另一个不是;入口控制器合并整个集群中的所有入口资源和大多数特定的wins(因此/api/v1/endpoint
将路由到service-a,如果其入口资源未注释,则默认情况下将使用HTTP)@mdaniel它如何与单个主机一起工作:proxy.com?两者都将指向同一地址。ingress是否支持同一主机上的两个项目?谢谢您的回答,但我认为您误解了我的问题。事实上,在我的示例中,我需要service-a和service-b与proxy.com拥有相同的主机。问题是,只要我使用同一台主机,它就无法按预期工作。