kube-dnsサービスの確認
Kubernetesでは、ポッドはDNS解決のために設定されたネームサーバーを使用します。ネームサーバーの設定は/etc/resolv.confに保存され、デフォルトではKubernetesがすべてのポッドに対してkube-dnsサービスのClusterIPをネームサーバーとして設定します。
ステップ1 - ポッドのresolv.confを確認する
まず、ポッド内のネームサーバー設定を確認しましょう:
~$kubectl exec -it -n catalog catalog-mysql-0 -- cat /etc/resolv.conf
search catalog.svc.cluster.local svc.cluster.local cluster.local us-west-2.compute.internal
nameserver 172.20.0.10
options ndots:5
ステップ2 - kube-dnsサービスのIPを確認する
次に、このIPがkube-dnsサービスのClusterIPと一致することを確認しましょう:
~$kubectl get svc kube-dns -n kube-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kube-dns ClusterIP 172.20.0.10 <none> 53/UDP,53/TCP,9153/TCP 22d
ネームサーバーのIPはkube-dnsサービスのClusterIPと一致しており、これは正しい設定です。
ステップ3 - kube-dnsサービスのエンドポイントを確認する
次に、kube-dnsサービスがCoreDNSポッドにトラフィックを適切にルーティングするように設定されていることを確認します:
~$kubectl describe svc kube-dns -n kube-system
...
IP: 172.20.0.10
IPs: 172.20.0.10
Port: dns 53/UDP
TargetPort: 53/UDP
Endpoints: 10.42.122.16:53,10.42.153.96:53
Port: dns-tcp 53/TCP
TargetPort: 53/TCP
Endpoints: 10.42.122.16:53,10.42.153.96:53
...
これらのエンドポイントをCoreDNSポッドのIPと比較します:
~$kubectl get pod -l k8s-app=kube-dns -n kube-system -o wide
NAME READY STATUS RESTARTS AGE IP ...
CoreDNS-787cb67946-72sqg 1/1 Running 0 18h 10.42.122.16 ...
CoreDNS-787cb67946-gtddh 1/1 Running 0 22d 10.42.153.96 ...
サービスエンドポイントはCoreDNSポッドのIPと一致しており、サービス設定が適切であることを確認できます。
注記
あなたの環境では異なるIPが表示されるでしょう。重要なのはサービスエンドポイントがCoreDNSポッドのIPと一致していることです。
ステップ4 - kube-proxyポッドを確認する
4.1. kube-proxyの機能を確認する
kube-proxyはクラスター内のサービスルーティングを管理します。kube-dnsサービスからCoreDNSポッドへのDNSトラフィックのルーティングを担当しています。kube-proxyポッドのステータスを確認しましょう:
~$kubectl get pod -n kube-system -l k8s-app=kube-proxy
NAME READY STATUS RESTARTS AGE
kube-proxy-b4kk4 0/1 CrashLoopBackOff 2 (20s ago) 35s
kube-proxy-hqw8v 0/1 CrashLoopBackOff 2 (21s ago) 34s
kube-proxy-rqszf 0/1 CrashLoopBackOff 2 (21s ago) 35s
kube-proxyポッドが失敗していることがわかります。
4.2. kube-proxyのログを調査する
~$kubectl logs -n kube-system -l k8s-app=kube-proxy
...
E1109 22:18:36.012740 1 proxier.go:634] "Could not create dummy VS" err="no such file or directory" scheduler="r"
E1109 22:18:36.012763 1 server.go:558] "Error running ProxyServer" err="can't use the IPVS proxier: no such file or directory"
E1109 22:18:36.012808 1 run.go:74] "command failed" err="can't use the IPVS proxier: no such file or directory"
ログはIPVS設定の問題を示しています。
備考
IPVS(IP Virtual Server)は、kube-proxyの代替モードで、パケット処理にハッシュテーブルを使用し、大規模クラスターでより良いパフォーマンスを提供します。