Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes 如何配置入口以使用https将流量定向到https后端_Kubernetes_Kubernetes Ingress_Nginx Ingress - Fatal编程技术网

Kubernetes 如何配置入口以使用https将流量定向到https后端

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

我有一个使用https的后端。 我想根据URL/路径分离后端上的负载

我决定使用入口来完成这个基于url/路径的逻辑,以便将流量移动到不同的后端(相同的后端,只是复制到不同的节点报告)

我的问题是如何配置入口以接收https请求并将这些https请求转发到https后端

谢谢

编辑: 我添加了yaml文件:

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