term タグ別の記事一覧

Kubernetesのサービス周りのトラブルシュート

 自前で構築したKubernetesクラスタでサービス(serivces、svc)関連がうまく動かない場合、原因としてfirewall関連の設定が不適切だったということがよくあります。kube-dns関連のトラブル(kube-dns Podが起動しないなど)もこれが原因であることがよくあります。

 そういった場合、とりあえずiptablesが正しく設定されているか、またクラスタ内からapiserverのbind-addressで指定したアドレスの8080番および6443番ポート)にアクセスできるよう設定しているかを確認してみましょう。

 また、Kubernetesのパケットは複雑な経路でやってくるので、インターフェイス単位でアクセス許可を指定した場合うまく動かない場合があります。そのため、たとえばfirewalldを利用している場合、コンテナに割り当てられるネットワーク(たとえば172.17.0.0/16)をinternalゾーンに追加したうえで8080/tcpおよび6443/tcpを許可する、もしくはtrustedゾーンに追加する、といったようにネットワーク単位で設定した方が確実です。

Fedora28で自前Kubernetesクラスタを作るメモ

 とりあえず基本的な流れは以前さくらのナレッジに書いたものと同じ。ただし、クラスタノードのkubelet設定ファイル(/etc/kubernetes/kubelet)の「KUBELET_ARGS」に次のように「–kubeconfig」および「–require-kubeconfig」パラメータを追加した上で、kubelet.ymlファイルを用意する必要がある。

KUBELET_ARGS="--cgroup-driver=systemd --fail-swap-on=false --kubeconfig=/etc/kubernetes/kubelet.yml --require-kubeconfig"

 kubelet.ymlファイルはこんな感じ。

kind: Config
clusters:
- name: local
  cluster:
    server: http://<api-serverのホスト名かIPアドレス>:8080
users:
- name: kubelet
contexts:
- context:
    cluster: local
    user: kubelet
  name: kubelet-context
current-context: kubelet-context

 –api_servers(–api-servers)オプションは廃止されているので、このように設定ファイルでapi-serverのURLを指定しなければならない模様(https://github.com/kubernetes/website/issues/7417)。

(追記@2018-05-15)

 kube-proxyにはiptables 1.6.2と組み合わせて使うとiptablesルールを適切に設定できないという不具合がある。Fedora 28のiptablesは1.6.2なので、これに引っかかる。Fedora 28のKubernetesパッケージに含まれているkubeletでは現時点でこれが修正されていない。とりあえずFedora 27用のiptables 1.6.1に置き換えることで問題は回避できそう。

$ wget https://dl.fedoraproject.org/pub/fedora/linux/releases/27/Everything/x86_64/os/Packages/i/iptables-1.6.1-4.fc27.x86_64.rpm
$ wget https://dl.fedoraproject.org/pub/fedora/linux/releases/27/Everything/x86_64/os/Packages/i/iptables-libs-1.6.1-4.fc27.x86_64.rpm
# dnf install iptables-*.rpm