![](/img/trans.png)
[英]How to make host interfaces, including cni* accessible in kubernetes privileged 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.