Networking Kubernetes的动态通配符子域入口
我目前正在使用GKE上的Kubernetes,通过Ingress资源在不同的子域上为我的产品的各个部分提供服务。例如:Networking Kubernetes的动态通配符子域入口,networking,kubernetes,load-balancing,google-kubernetes-engine,Networking,Kubernetes,Load Balancing,Google Kubernetes Engine,我目前正在使用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: path
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
或graded algorithm.api.mydomain.com
,灵感来自GitLab CI
以下是每个部署的潜在工作流程:
feature.api.mydomain.com
指定serviceName:feature-api-service
在kubernetes中当然没有类似于通配符的域,但是您可以使用 使用helm,您可以在清单中模板化变量,因此您可以将分支的名称置于helm中 从那里,您可以让gitlab ci在构建管道中安装helm,如果正确配置图表,您可以指定管道名称的helm参数
关于这种工作流程,有一篇很棒的博文,希望这能帮助您找到需要的地方。服务可以在本地以
my-svc.svc.cluster.local
您可以编写一个简单的NGINX代理,该代理可以转发,该代理可以解析子域并将其传递给http://$service,只要子域和服务名称与本例匹配。以下是一个示例:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-wildcard-host
spec:
rules:
- host: "foo.bar.com"
http:
paths:
- pathType: Prefix
path: "/bar"
backend:
service:
name: service1
port:
number: 80
- host: "*.foo.com"
http:
paths:
- pathType: Prefix
path: "/foo"
backend:
service:
name: service2
port:
number: 80
以及。您能否提供一个关于建议方法的简单实施示例?您是否能够实施所需的自动化解决方案?如果是的话,你能分享一些细节吗?@AngelTodorov开发优先权最终发生了变化,这个特定的项目不再被关注。最好的办法是遵循公认答案中的建议。如果我有时间去实际实施答案,我会更新这个问题。你能根据你的上述建议提供一个示例解决方案吗?@Angel Todorov你最终想出了解决方案吗?事实上,我很久以前就放弃了这个话题。。。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-wildcard-host
spec:
rules:
- host: "foo.bar.com"
http:
paths:
- pathType: Prefix
path: "/bar"
backend:
service:
name: service1
port:
number: 80
- host: "*.foo.com"
http:
paths:
- pathType: Prefix
path: "/foo"
backend:
service:
name: service2
port:
number: 80