这是我的用例:
我们有一个客户,他们的每项服务都必须在专用子域上可用。命名约定应为service-name.customerdomain.com
,其中service-name
是已部署的服务,而customerdomain.com
是客户域。创建新服务后,该服务应自动可用,即,一旦service-name
服务部署到集群中,它就必须在service-name.customerdomain.com
上可用。
我知道,这可以通过以下步骤手动实现:
将Ingress控制器添加到集群
创建通配符DNS *.customerdomain.com
并将其指向
入口控制器
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 - [...]
-host
部分
部署的服务-host
部分
服务基本上-我想自动执行第4步和第5步。我知道Ingress无法自行处理此问题,但是,谷歌搜索一下,似乎每次部署新服务/现有服务时都会更新ingress.yaml
文件可以通过Helm及其值文件将其删除。
如果能指出/描述以下示例解决方案,我将不胜感激。
答案 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/