使用Helm运算符为Kubernetes自动化通配符子域支持

时间:2018-12-28 00:59:31

标签: kubernetes kubernetes-helm kubernetes-ingress

这是我的用例: 我们有一个客户,他们的每项服务都必须在专用子域上可用。命名约定应为service-name.customerdomain.com,其中service-name是已部署的服务,而customerdomain.com是客户域。创建新服务后,该服务应自动可用,即,一旦service-name服务部署到集群中,它就必须在service-name.customerdomain.com上可用。

我知道,这可以通过以下步骤手动实现:

  1. 将Ingress控制器添加到集群

  2. 创建通配符DNS *.customerdomain.com并将其指向 入口控制器

  3. 为每个正在运行的服务映射子域。对于群集中的每个现有服务,请在Ingress资源文件ingress.yaml中创建一个单独的部分,例如
Spec:     
    rules: 
    - host: helloworld.awesome-customer.com 
    http: 
        paths: 
        - path: /* 
        backend: 
            serviceName: helloworld 
            servicePort: 8080 
    - host: nextfineapp.awesome-customer.com 
    http: 
        paths: 
        - path: /* 
        backend: 
            serviceName: nextfineapp 
            servicePort: 8080 
    - [...]
  1. 为每个新的Ingress资源文件添加新的-host部分 部署的服务
  2. 针对每个已删除的内容,删除Ingress资源文件-host部分 服务

基本上-我想自动执行第4步和第5步。我知道Ingress无法自行处理此问题,但是,谷歌搜索一下,似乎每次部署新服务/现有服务时都会更新ingress.yaml文件可以通过Helm及其值文件将其删除。

如果能指出/描述以下示例解决方案,我将不胜感激。

2 个答案:

答案 0 :(得分:2)

通常,您可以通过将Ingress资源的模板作为基础应用程序图表的一部分来进行此操作。您可以有多个Ingress对象,它们都将在运行时被多路复用以为您的控制器建立路由表。

答案 1 :(得分:1)

我建议使用@coderanger的建议。如果将Ingress添加到Helm图表中,则可以通过values.yaml文件对其进行控制。这就是官方的kubernetes掌舵图。但是,由于模板化的Ingress源文件仍然存在,因此创建Ingress并不是完全自动化。它是模板化而不是自动化。

要进一步自动化,您可以查看Jenkins-X暴露控制器。那将需要部署在您的集群中,然后它将监视部署了哪些服务以及它们具有在其上的注释以自动创建Ingress。与此相关的是,您仍然需要注释,因为您必须指出要公开哪些服务以及对其应用哪种路由逻辑。如果您使用头盔,则无论使用暴露控制器还是将Ingress资源放置在图表中,您的值文件最终都将相似。

Jenkins-X公开控制器也可以与通配符DNS一起使用。实际上,Jenkins-X默认情况下使用通配符DNS并公开控制器,因此您可以按照其指南之一进行操作。由于他们支持不同的平台,因此他们的文档可帮助您了解如何为不同的云提供商设置通配符DNS,例如https://aws.amazon.com/blogs/opensource/continuous-delivery-eks-jenkins-x/