我正在運行一個以 Flannel 作為 CNI 的 3 節點 Kubernetes 集群。我使用 kubeadm 設定集群,版本是 1.23。
我的 pod 需要使用 DNS 地址與外部主機通信,但這些主機沒有 DNS 服務器。為此,我在集群中每個節點的 /etc/hosts 中添加了它們的條目。節點可以從 DNS 決議主機,但 Pod 無法決議它們。
我試圖通過互聯網搜索這個問題,并且有建議使用 HostAlias 或更新容器內的 /etc/hosts 檔案。我的問題是主機串列很大,在yaml檔案中維護串列是不可行的。
我還查看了 Kubernetes 是否有一些內置標志來讓 Pod 在節點的 /etc/hosts 中查找條目但找不到它。
所以我的問題是——
- 為什么節點上運行的 pod 無法決議 /etc/hosts 檔案中存在的主機。
- 有沒有辦法設定本地 DNS 服務器并要求所有 Pod 查詢該 DNS 服務器以獲取特定的主機決議?
也歡迎任何其他建議或解決方法。
uj5u.com熱心網友回復:
容器中的環境應該與其他容器和機器(包括它的宿主機)分開,/etc/hosts 也是如此。
如果您使用 coreDNS(默認的內部 DNS),您可以通過修改其 configMap 輕松添加額外的主機資訊。
打開 configMapkubectl edit configmap coredns -n kube-system并對其進行編輯,使其包含以下hosts部分:
apiVersion: v1
data:
Corefile: |
.:53 {
...
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
fallthrough in-addr.arpa ip6.arpa
ttl 30
}
### Add the following section ###
hosts {
{ip1} {hostname1}
{ip2} {hostname2}
...
fallthrough
}
prometheus :9153
...
}
該設定將在幾分鐘內加載,然后所有 pod 都可以決議 configMap 中描述的主機。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/432965.html
標籤:Kubernetes dns 绒布 kube-代理
上一篇:在EKS上獲取JOB_COMPLETION_INDEX
下一篇:什么為prometheus提供了度量標準“container_cpu_usage_seconds_total”?
