安裝完Kubernetes後,在Pod中使用wget沒法訪問外網URL地址,可是使用IP地址是能夠訪問,應該是docker
Pod內沒法解析DNS致使的。ubuntu
嘗試了將DNS換爲CoreDNS,問題仍然存在。通過屢次測試,發現下面的方法是可行的:api
編輯主機的/etc/resolv.conf文件:服務器
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8) # DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN #nameserver 127.0.1.1 nameserver 192.168.199.1 nameserver 8.8.8.8 nameserver 9.9.9.9 search lan
若是/etc/resolv.conf爲連接,則須要修改/etc/resolvconf/resolv.conf.d/base或head文件,而後運行resolvconf -u進行更新/etc/resolv.conf裏的內容。網絡
Ubuntu16.04 LTS安裝的resolvconf有一些問題,/etc/resolv.conf並不是連接(有的安裝同一個版本是連接,很奇怪的),resolvconf -u等方法都會執行失敗。原則上,是連接的到/etc/resolvconf/resolv.conf.d裏面去改,不是連接的,直接修改/etc/resolv.conf文件。oop
可能Kubernetes啓動Pod時,要把/etc/resolv.conf裏的dns信息帶到pod中,而resolv.conf解析不到外面的地址。聯想到以前kube-dns常常出錯,估計也是這個緣由。配置完後,kube-dns就不多出錯了。測試
下面是從網上看到的方法,作過嘗試的一些方法。網站
通過測試,加入外部DNS後能夠訪問外部網址,/etc/resolv.conf裏的nameserver的IP地址沒法ping通,確定也沒法作域名解析了。所以,主要緣由在於service的clusterip能夠傳遞外部請求到pod,可是pod卻沒法訪問service的ip,在多個技術網站搜索,基本上都出現此問題。spa
解決方法包括:操作系統
###################################### # For K8s pod access service # by openthings,2018.06.30. #====================================== net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-arptables = 1 #######################################
按照這些方法搞過,仍是不行。 ping 10.96.0.10不通。
變通的方法:
可是,這兩個方法雖然能夠訪問外部地址了,但仍然不能訪問Kubernetes的Service產生的ClusterIP。不過,集羣內部訪問其它服務(包括POD本身的服務),能夠經過服務名進行。
嘗試設置Kubernetes的Kube-dns的外部dns,將下面內容保存爲extdns.yaml。
apiVersion: v1 kind: ConfigMap metadata: name: kube-dns namespace: kube-system labels: addonmanager.kubernetes.io/mode: EnsureExists data: upstreamNameservers: / ["8.8.8.8", "9.9.9.9"]
其它:
若是 Node 上安裝的 Docker 版本大於 1.12,那麼 Docker 會把默認的 iptables FORWARD 策略改成 DROP。這會引起 Pod 網絡訪問的問題。解決方法則在每一個 Node 上面運行 iptables -P FORWARD ACCEPT,好比
若是使用了 flannel/weave 網絡插件,更新爲最新版本也能夠解決這個問題。
DNS 沒法解析也有多是 kube-dns 服務異常致使的,能夠經過下面的命令來檢查 kube-dns 是否處於正常運行狀態
若是 kube-dns 處於 CrashLoopBackOff 狀態,那麼須要查看 kube-dns Pod 的日誌,根據日誌來修復 DNS 服務。
若是 kube-dns Pod 處於正常 Running 狀態,則須要進一步檢查是否正確配置了 kube-dns 服務:
若是 kube-dns service 不存在,或者 endpoints 列表爲空,則說明 kube-dns service 配置錯誤,能夠從新部署 kube-dns service。