我目前正在使用GKE上的Kubernetes,在不同的子域名下通过Ingress资源提供我的产品的各个部分。例如:api.mydomain.com
,console.mydomain.com
等。
ingress.yml(当前):
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress
spec:
rules:
- host: api.mydomain.com
http:
paths:
- backend:
serviceName: api-service
servicePort: 80
- host: console.mydomain.com
http:
paths:
- backend:
serviceName: console-service
servicePort: 80
这样运作得非常好,使用 L7 GCE 负载均衡器将流量路由到适当的位置。然而,我想要做的是,在将新功能推送到生产环境之前,部署许多功能分支部署作为子域名来测试和演示新功能。这些可能类似于 new-stylesheet.console.mydomain.com
或 upgraded-algorithm.api.mydomain.com
,受 GitLab CI 的 环境 的启发。
以下是每个部署的潜在工作流程:
- 创建 feature-api-deployment.yml
- 创建 feature-api-service.yml
- 使用新的子域名规则更新 ingress.yml:
feature.api.mydomain.com
指定serviceName: feature-api-service
但是,枚举和维护所有子域名 → 服务映射会随着撤销部署而变得混乱,并创建大量的 GCE 后端(默认配额为5 ...),因此并不理想。
是否有任何 Kubernetes 内置的东西可以处理这个问题?像这样选择一个基于匹配的子域的目标服务将是理想的:
ingress.yml (期望的)
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress
spec:
rules:
- host: *.api.mydomain.com
http:
paths:
- backend:
serviceName: {value of *}-api-service
servicePort: 80