Kubernetes 如何配置入口以使用https将流量定向到https后端
我有一个使用https的后端。 我想根据URL/路径分离后端上的负载 我决定使用入口来完成这个基于url/路径的逻辑,以便将流量移动到不同的后端(相同的后端,只是复制到不同的节点报告) 我的问题是如何配置入口以接收https请求并将这些https请求转发到https后端 谢谢 编辑: 我添加了yaml文件:Kubernetes 如何配置入口以使用https将流量定向到https后端,kubernetes,kubernetes-ingress,nginx-ingress,Kubernetes,Kubernetes Ingress,Nginx Ingress,我有一个使用https的后端。 我想根据URL/路径分离后端上的负载 我决定使用入口来完成这个基于url/路径的逻辑,以便将流量移动到不同的后端(相同的后端,只是复制到不同的节点报告) 我的问题是如何配置入口以接收https请求并将这些https请求转发到https后端 谢谢 编辑: 我添加了yaml文件: spec: rules: - http: paths: - backend: serviceName: service
spec:
rules:
- http:
paths:
- backend:
serviceName: service
servicePort: 9443
path: /carbon
- backend:
serviceName: service2
servicePort: 9443
path: /oauth
出于某种原因,我可以;t将规则从http更改为https如果您想在k8s中使用负载平衡机制,则应改为使用,并在该服务后面启动多个实例,这样k8s将执行负载平衡。如果您想使用后端的不同版本(例如prod和test),您可以使用分离它们的方法 如果您的服务只能通过https访问,则需要将以下注释添加到入口yaml:() 要保护入口本身,请查看以下内容: 但是,如果希望后端服务解密TLS通信,请改用以下注释:() 编辑: 如果您希望通过TLS到达后端,入口YAML应如下所示:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-name
namespace: namespace-name
annotations:
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
spec:
rules:
- http:
paths:
- backend:
serviceName: service
servicePort: 9443
path: /carbon
- backend:
serviceName: service2
servicePort: 9443
path: /oauth
如果您希望通过入口控制器中的TLS解密通过TLS到达后端,入口YAML应如下所示:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-name
namespace: namespace-name
annotations:
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
spec:
tls:
- hosts:
- app.myorg.com
secretName: tls-secret
rules:
- http:
paths:
- backend:
serviceName: service
servicePort: 9443
path: /carbon
- backend:
serviceName: service2
servicePort: 9443
path: /oauth
需要注意的是,tls secret是具有为主机(app.myorg.com)颁发的有效证书的SecretConfig的名称
如果您希望通过TLS到达后端并在后端进行TLS解密,则入口YAML应如下所示:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-name
namespace: namespace-name
annotations:
nginx.ingress.kubernetes.io/ssl-passthrough: "true"
spec:
rules:
- http:
paths:
- backend:
serviceName: service
servicePort: 9443
path: /carbon
- backend:
serviceName: service2
servicePort: 9443
path: /oauth
我自己从未测试过最后一个版本,所以我不知道这是否真的有效,但我强烈建议阅读该变体的文章。请查看我的编辑,出于某种原因,我无法将规则更改为HttpSt。该行为是正确的,因为您需要使用注释更改使用的协议。请参阅更新的答案以供参考。此答案帮助我解决了跨命名空间路由配置问题。Ally my deployments通过https公开服务,并在每个命名空间的入口清单中添加
nginx.ingres.kubernetes.io/backend-protocol:“https”
,解决了我的问题。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-name
namespace: namespace-name
annotations:
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
spec:
tls:
- hosts:
- app.myorg.com
secretName: tls-secret
rules:
- http:
paths:
- backend:
serviceName: service
servicePort: 9443
path: /carbon
- backend:
serviceName: service2
servicePort: 9443
path: /oauth
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-name
namespace: namespace-name
annotations:
nginx.ingress.kubernetes.io/ssl-passthrough: "true"
spec:
rules:
- http:
paths:
- backend:
serviceName: service
servicePort: 9443
path: /carbon
- backend:
serviceName: service2
servicePort: 9443
path: /oauth