首页 文章

Kubernetes的动态通配符子域入口

提问于
浏览
6

我目前正在GKE上使用Kubernetes,使用Ingress资源在不同的子域上为我的产品的各个部分提供服务 . 例如: api.mydomain.comconsole.mydomain.com

ingress.yml (current)

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.comupgraded-algorithm.api.mydomain.com ,灵感来自GitLab CI的environments .

这是每个部署的潜在工作流程:

  • 创建feature-api-deployment.yml

  • 创建feature-api-service.yml

  • 使用新的子域规则更新ingress.yml: feature.api.mydomain.com 指定 serviceName: feature-api-service

但枚举和维护所有子域 - >服务映射将会因拆除部署而变得混乱,并创建大量的GCE后端(默认配额为5 ......),因此它并不理想 .

Kubernetes是否有任何内置的东西可供我处理?像这样的东西是理想的选择基于匹配的子域的目标服务:

ingress.yml (wanted)

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress
spec:
  rules:
  - host: *.api.mydomain.com
    http:
      paths:
        - backend:
            serviceName: {value of *}-api-service
            servicePort: 80

2 回答

  • 0

    服务在当地提供

    my-svc.svc.cluster.local
    

    您可以编写一个简单的NGINX代理,它可以转发解析子域,代理将其传递给http:// $ service,只要子域和服务名称匹配,就像在这种情况下一样 .

  • 3

    肯定没有像kubernetes中可用的通配域这样的东西,但是你可能会想要使用Helm

    使用helm,您可以在清单中模拟变量,这样您就可以将分支的名称放在掌舵中values file

    从那里,您可以让gitlab-ci在构建管道中执行helm安装,如果正确配置了图表,则可以指定管道名称的helm参数 .

    关于这种工作流程有一篇很棒的博客文章here - 希望这会让你得到你需要去的地方 .

相关问题