Kubernetes環境にDashboardとDNSサービスをデプロイする
前回作成したマルチマスターKubernetes環境はKubernetesの最小構成なので、今回はDashboardとDNSサービスをデプロイしたいと思います。 まずはDashboardのデプロイから。
Dashboardの設定
- kube-controller-managerの設定で、ServiceAccountがAPIサーバとの通信に使うルートCA証明書を持つように設定する
# sed -i 's@KUBE_CONTROLLER_MANAGER_ARGS="@KUBE_CONTROLLER_MANAGER_ARGS="--root-ca-file=/etc/kubernetes/certs/apiserver.crt @g' /etc/kubernetes/controller-manager # systemctl restart kube-controller-manager
- 既存のServiceAccount「default」を削除(自動的に新しいCA証明書を持つServiceAccountが再作成されます)
# kubectl delete sa default # kubectl delete sa default -n kube-system # kubectl delete sa default -n kube-public
- APIサーバ側でsystem:anonymousがNamespace"kube-system"のResource"*"にRW権限を付ける
- ABACの設定
# vi /etc/kubernetes/abac-policy.json
{"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"user":"system:anonymous", "namespace": "kube-system", "resource": "*"}}
- APIサーバの認可機能で、RBACも適用するように設定する。
# sed -i 's/--authorization-mode=ABAC/--authorization-mode=RBAC,ABAC/g' /etc/kubernetes/apiserver # systemctl restart kube-apiserver
- manifestを落としてくる
# curl -O https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml
- manifestの修正
- Dashboard自体のベーシック認証を有効化する
- オプション指定
- Dashboard自体のベーシック認証を有効化する
... spec: containers: - name: kubernetes-dashboard image: k8s.gcr.io/kubernetes-dashboard-amd64:v1.8.3 ports: - containerPort: 8443 protocol: TCP args: - --auto-generate-certificates - --authentication-mode # ここを追加 - basic # ここを追加 # Uncomment the following line to manually specify Kubernetes API server Host # If not specified, Dashboard will attempt to auto discover the API server and connect # to it. Uncomment only if the default does not work. # - --apiserver-host=http://my-address:port ...
- kubernetes-dashboardポッドのデプロイ
# kubectl create -f kubernetes-dashboard.yaml
次にDNSサービスのデプロイですねー
kube-dns設定
# sed -i 's/KUBELET_ARGS="/KUBELET_ARGS="--cluster-dns=172.16.0.2 --cluster-domain=cluster.local /g' /etc/kubernetes/kubelet # systemctl restart kubelet
- manifestをダウンロード
# curl -O https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/dns/kube-dns.yaml.sed # mv kube-dns.yaml.sed kube-dns.yaml
# sed -i "s/\$DNS_SERVER_IP/172.16.0.2/g" kube-dns.yaml # sed -i "s/\$DNS_DOMAIN/cluster.local/g" kube-dns.yaml
- kube-dnsポッドのデプロイ
# kubectl create -f kube-dns.yaml
これでDashboardとDNSサービス用のPodなりServiceなりが正常に上がるはずです。
Dashboardはこんな感じ。
DNSサービスの稼働確認をするために、httpdポッドを二つ、別のノードに上げてみましょう。Masterノードで以下を叩きます。
# kubectl create deploy --image httpd httpd-1 # kubectl create deploy --image httpd httpd-2 # kubectl expose deploy httpd-1 --port 80 # kubectl expose deploy httpd-2 --port 80
ポッドが上がったら、以下のコマンドでcurlをそれぞれのポッドにインストールします。
# kubectl exec <httpd-1のポッド> -- apt-get update # kubectl exec <httpd-1のポッド> -- apt-get install -y curl # kubectl exec <httpd-2のポッド> -- apt-get update # kubectl exec <httpd-2のポッド> -- apt-get install -y curl
curlをインストールしたら、互いのサービスに対して名前解決ができるかを確かめます。
# kubectl exec <httpd-1のポッド> -- curl httpd-2 # kubectl exec <httpd-2のポッド> -- curl httpd-1