Fri, May 4, 2018

Kubernetes 1.10のクラスタにWeave Netをデプロイする

Kubernetes 1.10のクラスタにWeave Netをデプロイする

Kubernetes 1.10をスクラッチから全手動で構築」で、Kubernetes 1.10のクラスタに、ネットワークプロバイダとしてflannelをデプロイしたけど、flannelはNetwork Policyをサポートしていないので、代わりにWeave Netをデプロイしてみた話。

Weave Netにした理由

Network Policyをサポートしているネットワークプロバイダには現時点で以下のものがある。

このなかで、よく名前を聞くのがCalicoとWeave Net。 GitHubのスター数が圧倒的に多いのがWeave Net。 性能が比較的いいのがWeave Net。

ということでWeave Netにした。

Weave Netデプロイ

以下を参考に設定してデプロイする。

Kubernetesマニフェスト

Weave NetをKubernetesクラスタにデプロイするためのマニフェストは、GitHub Releaseshttps://cloud.weave.worksからダウンロードできる。 今回は後者にする。

https://cloud.weave.worksを使う場合、Kubernetesのバージョンなどのパラメータはクエリストリングで指定できる。 主なパラメータは以下。


WEAVE_MTUはとりあえずデフォルトにしておいて、IPALLOC_RANGEもデフォルトにして、通信暗号化して、CHECKPOINT_DISABLEをtrueにするとすると、マニフェストは以下のようにダウンロードできる。

# curl -fsSLo weave-daemonset.yaml "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')&env.CHECKPOINT_DISABLE=1&password-secret=weave-passwd"

(通信暗号化は単一ノードなら不要だと思うけどとりあえず設定しておく。)

Kubernetesコンポーネントの起動オプション

kube-controller-managerの起動オプションの--cluster-cidrはIPALLOC_RANGEと同じにする必要がある。 今回は10.32.0.0/12を指定する。

また、kube-proxyの起動オプションの要件は以下。

  • --masquerade-allを指定してはいけない。
  • --cluster-cidrを指定する場合、IPALLOC_RANGEと同じにする必要がある。

また、kube-apiserverとkube-controller-managerの起動オプションに--allow-privilegedを付ける必要があるはず。

Secret作成

password-secretに渡すSecretは以下のように作成できる。

# WEAVE_PASSWORD=$(echo -n 'your_secure_password' | base64)
# cat <<EOF | kubectl create -f -
apiVersion: v1
kind: Secret
metadata:
  namespace: kube-system
  name: weave-passwd
type: Opaque
data:
  weave-passwd: ${WEAVE_PASSWORD}
EOF


これで準備完了。

マニフェスト適用

以下のコマンドでマニフェストを適用し、Weave Netをデプロイできる。

# kubectl apply -f weave-daemonset.yaml

weaveworks/weave-kube:2.3.0weaveworks/weave-npc:2.3.0がpullされる。 前者が本体で、後者がNetwork Policy Controller。


マスタノード上で以下のコマンドを実行すると、Weave NetのAPIを叩いて状態を確認できる。

# curl http://localhost:6784/status
        Version: 2.3.0 (version check update disabled)

        Service: router
       Protocol: weave 1..2
           Name: 92:44:35:3d:f8:d8(k8s-master)
     Encryption: enabled
  PeerDiscovery: enabled
        Targets: 1
    Connections: 1 (1 failed)
          Peers: 1
 TrustedSubnets: none

        Service: ipam
         Status: ready
          Range: 10.32.0.0/12
  DefaultSubnet: 10.32.0.0/12