Networking Kubernetes的动态通配符子域入口

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

我目前正在使用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
graded 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…),因此这并不理想

    库伯内特斯身上有什么我忽略的东西来处理这个问题吗?类似这样的情况非常适合根据匹配的子域选择目标服务:

    ingres.yml(通缉)


    在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