【问题标题】:Automating wildcard subdomain support for Kubernetes using Helm operator使用 Helm 运算符自动支持 Kubernetes 的通配符子域
【发布时间】:2018-12-28 00:59:31
【问题描述】:

这是我的用例: 我们有一个客户,他们的每项服务都必须在专用子域上可用。命名约定应为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 及其值文件实现。

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

【问题讨论】:

    标签: kubernetes kubernetes-helm kubernetes-ingress


    【解决方案1】:

    您通常会通过将 Ingress 资源的模板作为基本应用程序图表的一部分来做到这一点。您可以拥有多个 Ingress 对象,并且它们都将在运行时被多路复用,以便为您的控制器构建路由表。

    【讨论】:

    【解决方案2】:

    我会推荐 @coderanger 的建议。如果您在 helm 图表中添加 Ingress,则可以通过 values.yaml 文件对其进行控制。这就是官方的 Kubernetes helm 图表所做的。但是,创建 Ingress 并不完全是自动化的,因为模板化的 Ingress 源文件仍然存在。它是模板化而不是自动化。

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

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

    【讨论】:

    • 上述解决方案不知何故改变了imo。在额外的谷歌搜索之后,我正在考虑以下方法,使用 Helm 操作员: 1)一旦在集群范围内部署了新服务,这应该由 Helm 操作员拾取; 2) ingress.yml 将更新为新的-host 部分,其中将指定服务名称和子域名,使用以下模式service-name.domain.com; 3)入口控制器将被重建,因此新服务将通过新添加的子域提供。看起来可行吗?
    • 所以你是不是可以使用(或扩展?)Helm 操作符来自动生成/修改 Ingress?我有兴趣查看导致您产生此想法的链接。我假设(我猜@coderanger 也是如此)您正在寻找以通常的掌舵方式(如官方图表)使用包含入口 yaml 文件的掌舵图表。
    • 需要明确的是,您不仅限于只有一个入口 yaml 文件。您可以部署多个,每个都指定一个特定的规则,这些规则都将由入口控制器应用。因此伞状舵图可以包含多个子图,并且每个子图都可以指定自己的入口规则——部署时它们都会被应用。这实际上是 ingress 的一个特性——它将代理配置外部化。
    • 关于跨文件拆分规则的问题见stackoverflow.com/questions/52382658/…
    • helm 图表中的所有内容,包括部署、服务和入口都可以通过“helm install”应用。一起安装的那组对象称为发布,“helm delete”可以一起删除发布及其所有对象。通常,helm chart 中的所有资源文件都是由开发人员编写的,并且是 chart 源代码的一部分。我是从纯 helm 的角度说的 - 我通常只使用 helm 而不是 operator。
    猜你喜欢
    • 2021-10-22
    • 2020-07-14
    • 2020-09-08
    • 2017-09-01
    • 2016-07-14
    • 2020-08-23
    • 1970-01-01
    • 2011-01-26
    • 2023-03-06
    相关资源
    最近更新 更多