如何从 ALB Ingress 路由到混合 HTTP 和 HTTPS 后端?

如何从 ALB Ingress 路由到混合 HTTP 和 HTTPS 后端?

我有一个在 EKS(在 AWS 上)中运行的 Kubernetes 集群。

在集群中我有 Elasticsearch、Kibana 和其他各种 Web 服务。

我想要设置单个 ALB 负载均衡器,以便:

  • 请求/_kibana/*被路由至service: search-kb-http, port: 5601
  • 所有其他流量/*被路由到service: web-service-locator, port: 5000

因此我创建了这个:

#Note: search-kb-http is provided by Kibana operator
---
apiVersion: v1
kind: Service
metadata:
  name: web-service-locator
  namespace: default
spec:
  ports:
  - name: http
    port: 5000
    protocol: TCP
  selector:
    company-app: web
  type: NodePort
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  annotations:
    alb.ingress.kubernetes.io/load-balancer-name: [SNIP]
    external-dns.alpha.kubernetes.io/hostname: [SNIP]
    alb.ingress.kubernetes.io/ssl-redirect: '443'
    alb.ingress.kubernetes.io/certificate-arn: [SNIP]  
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/target-type: ip
    kubernetes.io/ingress.class: alb
  name: public-ingress
  namespace: default
spec:
  rules:
  - http:
      paths:
      - path: /_kibana/*
        backend:
          serviceName: search-kb-http
          servicePort: 5601
      - path: /*
        backend:
          serviceName: web-service-locator
          servicePort: 5000

问题在于

我更喜欢在 ALB 上为主要 Web 服务执行 SSL 终止。但 Kibana 后端仅提供 HTTPS。所以我需要两个不同的后端在传输过程中使用不同的协议。

在进行我的研究时,似乎有一个注释可以应用于入口:

alb.ingress.kubernetes.io/backend-protocol: HTTPS

但这个变化似乎影响了整个入口。

有没有办法为不同的后端指定不同的传输协议?

非常感谢!

[编辑]我找到了一种在 ECK 中禁用 Kibana 上的 TLS 的解决方法。但问题仍然存在,即这是否可行。谢谢!

相关内容