【问题标题】:How to change /etc/resolv.conf file in an OpenShift pod如何更改 OpenShift pod 中的 /etc/resolv.conf 文件
【发布时间】:2018-07-06 02:10:39
【问题描述】:

我有一个部署到 OpenShift 上的 docker 映像(使用 oc new-app)。但是,由于 /etc/resolv.conf 中缺少 dns 搜索条目,它无法正常工作。当我从我的 docker 镜像创建一个容器并运行它时,我可以指定参数 --dns-search。

在使用 oc new-app 将我的图像部署到 OpenShift 的过程中,我该如何做类似的事情?

【问题讨论】:

  • 这是什么 OpenShift 实例?您是否构建了自己的 OpenShift 集群?您是否使用 Minishift、oc cluster up 或一些第三方托管 OpenShift?
  • 搜索域是外部域,而不是托管在您的 Openshift 上吗?通常,您可以只使用他们的名字来引用“邻居”(例如,db 就可以了)
  • @GrahamDumpleton,这是 OpenShift 企业版。不使用任何第三方托管,这是由我自己的公司托管的。
  • 一种方法是在项目中创建一个具有所需名称的服务,并为外部主机分配一个外部 IP。 docs.openshift.com/container-platform/3.9/dev_guide/…

标签: docker dns openshift openshift-origin


【解决方案1】:

您可以在主服务器中编辑节点的配置映射

# oc get cm -n openshift-node

对于所有计算节点,通过以下命令编辑配置映射。(只需要在主服务器中执行)

#  oc edit cm node-config-compute  -n openshift-node

......
dnsBindAddress: 127.0.0.1:53
    dnsDomain: cluster.local
    dnsIP: 10.0.80.11
    dnsNameservers: null
    dnsRecursiveResolvConf: /etc/origin/node/resolv.conf
.......

使用您的 DNS IP 编辑 dnsIP 部分。然后重启服务

# systemctl restart atomic-openshift-node.service

DNS ip 将被添加到 Pod 的所有 /etc/resolv.conf 文件中。

详细信息存在here

【讨论】:

    【解决方案2】:

    有几个选项:

    1. 如果容器正在运行,请输入容器:docker exec -it container_id bash 然后编辑文件,然后使用 docker commit 来 保存更改。
    2. 可以在Dockerfile中添加名称:CMD cat name >>/etc/resolve.conf
    3. 将系统中的 resolv.conf 挂载到映像。

    【讨论】:

    • 这些都不能在 OpenShift/Kubernetes 环境中真正起作用。
    • 我看不出有什么理由。如果他使用 docker 映像并对其进行更改,它将应用于 pod。而他所描述的问题也可以通过这个来解决。
    • 我的理解是 Kubernetes 替换了 /etc/resolv.conf 文件,因此不会使用镜像中的任何更改。所以你必须使用 Kubernetes 的配置机制来影响对文件的更改。
    • 您可以在kubernetes.io/docs/concepts/services-networking/dns-pod-servicekubernetes.io/docs/tasks/administer-cluster/… 中找到有关它的一些信息,但由于使用的内部DNS 不同,我不知道它们是否同样适用于OpenShift。也就是说,根据 SkyDNS、kube-dns 或 CoreDNS 的使用情况会有所不同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-02
    • 1970-01-01
    • 2020-02-29
    • 2011-10-24
    • 1970-01-01
    • 1970-01-01
    • 2020-03-01
    相关资源
    最近更新 更多