【问题标题】:How to add extra hosts entries in helm charts如何在 helm 图表中添加额外的主机条目
【发布时间】:2020-06-22 22:40:18
【问题描述】:

所以我在 kubernetes sing helm 图表上部署我的应用程序堆栈,现在我需要在我的 pods /etc/hosts 文件中添加一些依赖的服务器 ip 和主机名,所以在这种情况下需要帮助

【问题讨论】:

    标签: kubernetes kubernetes-helm


    【解决方案1】:

    原始问题的 helm 模板化解决方案。我用 helm 3 对此进行了测试。

    apiVersion: apps/v1
    kind: Deployment
    spec:
      template:
        spec:
        {{- with .Values.hostAliases }}
          hostAliases:
    {{ toYaml . | indent 8 }}
        {{- end }}
    

    对于诸如以下的值:

    hostAliases:
      - ip: "10.0.0.1"
        hostnames:
        - "host.domain.com"
    

    如果在值中省略或注释了 hostAliases,则在呈现模板时省略 hostAliases 部分。

    【讨论】:

    • 此解决方案将在列表的第一个元素中创建错误的格式。以下代码适用于 helm v3.5.0 hostAliases: {{- .Values.hostAliases | toYaml | nindent 8 }}
    【解决方案2】:

    在文档中,您可以使用 host aliases 功能向 POD 添加额外的主机

    来自文档的示例:

    apiVersion: v1
    kind: Pod
    metadata:
      name: hostaliases-pod
    spec:
      restartPolicy: Never
      hostAliases:
      - ip: "127.0.0.1"
        hostnames:
        - "foo.local"
        - "bar.local"
      - ip: "10.1.2.3"
        hostnames:
        - "foo.remote"
        - "bar.remote"
      containers:
      - name: cat-hosts
        image: busybox
        command:
        - cat
        args:
        - "/etc/hosts"
    

    【讨论】:

      【解决方案3】:

      Kubernetes 提供了一个 DNS service 供所有 pod 使用。反过来,您可以定义一个仅定义 DNS 记录的ExternalName service。一旦你这样做了,你的 pod 就可以像与任何其他 Kubernetes 服务一样与该服务通信,并到达任何服务器。

      您可以在全球范围内部署一组 ExternalName 服务。如果需要,您也可以在 Helm 图表中执行此操作,例如

      apiVersion: v1
      kind: Service
      metadata:
        name: {{ .Release.Name }}-{{ .Chart.Name }}-foo
      spec:
        type: ExternalName
        externalName: {{ .Values.fooHostname }}
      

      我学到的做法是尽可能避免使用/etc/hosts

      【讨论】:

        猜你喜欢
        • 2011-04-09
        • 2015-02-14
        • 1970-01-01
        • 1970-01-01
        • 2013-04-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多