我有一个在 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 的解决方法。但问题仍然存在,即这是否可行。谢谢!