簡體   English   中英

如何將自定義主機條目添加到 kubernetes Pods?

[英]How to add custom host entries to kubernetes Pods?

我的應用程序通過主機名與某些服務通信。 將我的應用程序作為 docker 容器運行時,我曾經將主機名添加到主機的 /etc/hosts 並使用--net=host運行容器。

現在我在 kubernetes 集群中運行我的容器。 我想知道如何通過yaml將 /etc/hosts 條目添加到 pod 中。

我正在使用 kubernetes v1.5.3。

從 k8s 1.7 開始,您可以添加hostAliases 文檔中的示例

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"

主機文件會給你帶來問題,但如果你真的需要,你可以使用配置映射。

像這樣添加一個配置映射

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-app-hosts-file-configmap
data:
  hosts: |-
    192.168.0.1 gateway
    127.0.0.1 localhost

然后將其安裝在您的 pod 中,如下所示:

  volumeMounts:
    - name: my-app-hosts-file
      mountPath: /etc/
volumes:
  - name: my-app-hosts-file
    configMap:
    name: my-app-hosts-file-configmap

這有效並且看起來更簡單:

kind: Service
apiVersion: v1 
metadata:
    name: {HOST_NAME} 
    spec:
      ports:
        - protocol: TCP
          port: {PORT}
          targetPort: {PORT}
      type: ExternalName
      externalName: {EXTERNAL_IP}

現在您可以直接使用 pod 中的HOST_NAME來訪問外部機器。

我本人並不需要POD中的主機條目,但是從理論上講,您應該將這些條目添加到容器的dockerfile中,而不是作為Pod yaml的一部分-即使可以使用command參數, 如此答案中所述

原因是Pod在邏輯上是一層包裹在容器周圍的層,不應與在容器內運行的應用程序的細節有關。

另一種方法是在 pod生命周期上使用postStart鈎子,如下所示:

 lifecycle: postStart: exec: command: ["/bin/sh", "-c", "echo '192.168.1.10 weblogic-jms1.apizone.io' >> /etc/hosts; echo '192.168.1.20

weblogic-jms2.apizone.io' >> /etc/hosts; echo '192.168.1.30 weblogic-jms3.apizone.io' >> /etc/hosts; echo '192.168.1.40 weblogic-jms4.apizone.io' >> /etc/hosts"]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM