Table of Contents
「Kubernetes 1.10をスクラッチから全手動で構築」で、Kubernetes 1.10のクラスタに、ネットワークプロバイダとしてflannelをデプロイしたけど、flannelはNetwork Policyをサポートしていないので、代わりにWeave Netをデプロイしてみた話。
Weave Netにした理由
Network Policyをサポートしているネットワークプロバイダには現時点で以下のものがある。
- Calico
- Cilium
- Kube-router
- Romana
- Weave Net
このなかで、よく名前を聞くのがCalicoとWeave Net。 GitHubのスター数が圧倒的に多いのがWeave Net。 性能が比較的いいのがWeave Net。
ということでWeave Netにした。
Weave Netデプロイ
以下を参考に設定してデプロイする。
- https://www.weave.works/docs/net/latest/kubernetes/kube-addon/
- https://www.weave.works/docs/net/latest/install/installing-weave/
- https://github.com/weaveworks/weave/blob/master/prog/weave-kube/launch.sh
Kubernetesマニフェスト
Weave NetをKubernetesクラスタにデプロイするためのマニフェストは、GitHub Releasesかhttps://cloud.weave.works
からダウンロードできる。
今回は後者にする。
https://cloud.weave.works
を使う場合、Kubernetesのバージョンなどのパラメータはクエリストリングで指定できる。
主なパラメータは以下。
- k8s-version: Kubernetesのバージョン。指定しないとlatest。
- password-secret: ノード間のWeave Net通信の暗号化に使うパスワードを保持するSecret名。指定しないと平文。(参考: https://www.weave.works/docs/net/latest/tasks/manage/security-untrusted-networks/)
- IPALLOC_RANGE: Podに割り当てるIPアドレスの範囲。指定しないと10.32.0.0/12。
- CHECKPOINT_DISABLE: Weave Netのアップデートを定期的にチェックする機能の無効化オプション。
- WEAVE_MTU: MTUを指定するオプション。デフォルトで1376バイト。
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.0
とweaveworks/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