Azure Kubernetes Nginx Ingress:如何使用HTTPS和502正确路由到API服务和Nginx web服务器?

Azure Kubernetes Nginx Ingress:如何使用HTTPS和502正确路由到API服务和Nginx web服务器?,kubernetes,nginx-ingress,Kubernetes,Nginx Ingress,我有两个服务,一个提供RESTAPI,另一个通过nginx web服务器提供静态内容。 我可以通过使用https的入口控制器从运行nginx web服务器的pod中检索静态内容,前提是我不在入口yaml中使用以下注释 nginx.ingres.kubernetes.io/backend-protocol:HTTPS 但是,后端API服务不再工作。如果我重新添加该注释,后端服务URLhttps://fqdn/restservices/engine-rest/v1/api工作,但前端https://

我有两个服务,一个提供RESTAPI,另一个通过nginx web服务器提供静态内容。 我可以通过使用https的入口控制器从运行nginx web服务器的pod中检索静态内容,前提是我不在入口yaml中使用以下注释

nginx.ingres.kubernetes.io/backend-protocol:HTTPS

但是,后端API服务不再工作。如果我重新添加该注释,后端服务URL
https://fqdn/restservices/engine-rest/v1/api
工作,但前端
https://fqdn/
web服务器抛出一个502

入口

Ingress
kind: Ingress
apiVersion: extensions/v1beta1
metadata:
  name: ingress
  namespace: namespace-abc
  annotations:
    nginx.ingress.kubernetes.io/backend-protocol: HTTPS
spec:
  rules:
    - http:
        paths:
          - path: /restservices/engine-rest/v1
            backend:
              serviceName: a
              servicePort: 8080
          - path: /
            backend:
              serviceName: b
              servicePort: 8011

服务API

kind: Service
apiVersion: v1
metadata:
  name: a
  namespace:  namespace-abc
  
  labels:
    app: a
    version: 1
spec:
  ports:
    - name: https
      protocol: TCP
      port: 80
      targetPort: 8080
      nodePort: 31019
  selector:
    app: a
    version: 1
  clusterIP: <cluster ip>
  type: LoadBalancer
  sessionAffinity: ClientIP
  externalTrafficPolicy: Cluster
  sessionAffinityConfig:
    clientIP:
      timeoutSeconds: 10800

种类:服务
版本:v1
元数据:
姓名:a
名称空间:名称空间abc
标签:
应用程序:a
版本:1
规格:
端口:
-名称:https
协议:TCP
港口:80
目标港:8080
节点端口:31019
选择器:
应用程序:a
版本:1
集群:
类型:负载平衡器
会话相关性:ClientIP
外部流量策略:群集
sessionAffinityConfig:
客户:
超时秒数:10800
服务用户界面

kind: Service
apiVersion: v1
metadata:
  name: b
  namespace: namespace-abc
  labels:
    app: b
    version: 1
  annotations:
spec:
  ports:
    - name: http
      protocol: TCP
      port: 8011
      targetPort: 8011
      nodePort: 32620
  selector:
    app: b
    version: 1
  clusterIP: <cluster ip>
  type: LoadBalancer
  sessionAffinity: None
  externalTrafficPolicy: Cluster

种类:服务
版本:v1
元数据:
姓名:b
名称空间:名称空间abc
标签:
应用程序:b
版本:1
注释:
规格:
端口:
-名称:http
协议:TCP
港口:8011
目标港:8011
节点端口:32620
选择器:
应用程序:b
版本:1
集群:
类型:负载平衡器
会话相关性:无
外部流量策略:群集

如果您的问题是添加
nginx.ingres.kubernetes.io/backend-protocol:HTTPS
使服务-A工作但服务-B失败,删除它使服务-A失败但服务-B工作,那么解决方案是创建两个不同的入口对象,以便可以独立地对它们进行注释

---
种类:入口
apiVersion:extensions/v1beta1
元数据:
姓名:安格斯-a
名称空间:名称空间abc
注释:
nginx.ingres.kubernetes.io/backend-protocol:HTTPS
规格:
规则:
-http:
路径:
-路径:/restservices/engine rest/v1
后端:
服务名称:a
服务端口:8080
---
种类:入口
apiVersion:extensions/v1beta1
元数据:
姓名:ingress-b
名称空间:名称空间abc
规格:
规则:
-http:
路径:
-路径:/
后端:
服务名称:b
服务端口:8011

谢谢,现在我需要真正理解为什么这个解决方案是必要的。