0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

hostNetwork: trueなPodでDNSがうまくいかない時

Posted at

はじめに

Podに**hostNetwork: true**を設定すると、ホストのネットワークを共有できるため便利ですが、DNS関連で予期せぬ問題が発生することがあります。

この記事では、hostNetwork: trueのPodで名前解決が失敗した際のチェックポイントと、その解決策について解説します。


発生した問題

外部のサーバーに接続したかったのですが、アプリケーションコードにIPを直接書くのを避けるため、KubernetesのServiceEndpointsを直接作成しました。

しかし、hostNetwork: trueを設定したPodでアプリケーションを動かすと、DNSルックアップができず、名前解決エラーが発生しました。


原因

**hostNetwork: trueなPodのデフォルトのdnsPolicyClusterFirstWithHostNet**です。

これは、Podがまずクラスタ内のCoreDNSに問い合わせ、名前解決に失敗した場合、ホスト側のDNS設定にフォールバックするという挙動です。

今回のケースでは、何らかの原因でクラスタのDNS設定がうまく機能せず、ホスト側の設定にフォールバックしてしまったために、作成したServiceの名前解決ができませんでした。


解決策

dnsPolicyClusterFirstWithHostNetに変更することで解決しました。

具体的な修正内容は、kubectl editコマンドでPodのYAMLを以下のように編集しました。

spec:
  # ... 省略 ...
  hostNetwork: true
  dnsPolicy: ClusterFirstWithHostNet  # ここを修正
  # ... 省略 ...

まとめ

hostNetwork: trueなPodで名前解決に問題が発生した場合、dnsPolicyの設定を見直してみましょう。

  • hostNetwork: trueのPodのデフォルトdnsPolicyは**ClusterFirst**
  • クラスタ内のDNSサーバを確実に使いたい場合は、**dnsPolicy: ClusterFirstWithHostNet**に明示的に設定する。

この設定を理解しておけば、Kubernetesにおけるネットワーク周りのトラブルシューティングがスムーズになります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?