Kubernetes the Hard Way on Azure : 10. kubectl

こんにちは。
引き続き、Kubernetes the Hard Way on Azure を進めていきます。
ついに 10/15 まできたぞ〜!

10. Configuring kubectl for Remote Access

このラボでは、管理者のユーザ資格情報に基づいて、kubectl コマンドラインユーティリティ用の kubeconfig ファイルを生成します。
このラボのコマンドは、前回までに生成したクライアント認証を保管しているディレクトリで実行してください。

f:id:dombri:20200213074533j:plain

今回はこのあたり。
途中躓いたので、参考にされる場合は注意して読み進めてください。

The Admin Kubernetes Configuration File

各 kubeconfig には、接続する Kubernetes APIサーバ情報が必要です。高可用性をサポートするために、Kubernetes APIサーバの前にある外部ロードバランサに割り当てられたIPアドレスが使用されます。

静的IPアドレス [kubernetes-the-hard-way] を取得します。

KUBERNETES_PUBLIC_ADDRESS=$(az network public-ip show -g kubernetes \
  -n kubernetes-pip --query ipAddress -otsv)

admin ユーザとしての認証に合わせた kubeconfig ファイルを生成します。

kubectl config set-cluster kubernetes-the-hard-way \
  --certificate-authority=ca.pem \
  --embed-certs=true \
  --server=https://${KUBERNETES_PUBLIC_ADDRESS}:6443

kubectl config set-credentials admin \
  --client-certificate=admin.pem \
  --client-key=admin-key.pem

kubectl config set-context kubernetes-the-hard-way \
  --cluster=kubernetes-the-hard-way \
  --user=admin

kubectl config use-context kubernetes-the-hard-way


Verification

リモートKubernetes クラスタのヘルスチェックを行います。

kubectl get componentstatuses

The connection to the server localhost:6443 was refused - did you specify the right host or port?

おや・・・出ないぞ・・・kubeconfig の設定状況を確認してみます。

# 設定確認
kubectl config view

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: DATA+OMITTED
    server: https://kubernetes.docker.internal:6443
  name: docker-desktop
contexts:
- context:
    cluster: docker-desktop
    user: docker-desktop
  name: docker-desktop
- context:
    cluster: docker-desktop
    user: docker-desktop
  name: docker-for-desktop
- context:
    cluster: kubernetes-the-hard-way
    user: admin
  name: kubernetes-the-hard-way
current-context: kubernetes-the-hard-way
kind: Config
preferences: {}
users:
  user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED

[kubernetes-the-hard-way] クラスタの設定ができていない・・・?

admin ユーザとしての認証に合わせた kubeconfig ファイルを生成します。

これが気になるので、kubectl config 群の全てのコマンドを sudo で再度実行してから確認してみます。

kubectl config view

# 出力結果
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: DATA+OMITTED
    server: https://kubernetes.docker.internal:6443
  name: docker-desktop
- cluster:
    certificate-authority-data: DATA+OMITTED
    server: https://**.***.**.**:6443
  name: kubernetes-the-hard-way
contexts:
- context:
    cluster: docker-desktop
    user: docker-desktop
  name: docker-desktop
- context:
    cluster: docker-desktop
    user: docker-desktop
  name: docker-for-desktop
- context:
    cluster: kubernetes-the-hard-way
    user: admin
  name: kubernetes-the-hard-way
current-context: kubernetes-the-hard-way
kind: Config
preferences: {}
users:
- name: admin
  user:
    client-certificate: /Users/hoge/HardWay/admin.pem
    client-key: /Users/hoge/HardWay/admin-key.pem
- name: docker-desktop
  user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED

ほっ・・・出てくるようになりました。
ここでもう一度試します。

kubectl get componentstatuses

# 出力結果
NAME                 STATUS    MESSAGE             ERROR
controller-manager   Healthy   ok
scheduler            Healthy   ok
etcd-0               Healthy   {"health":"true"}
etcd-1               Healthy   {"health":"true"}

よしっ。ノード一覧も確認します。

Kubectl get nodes

# 出力結果
NAME       STATUS   ROLES    AGE   VERSION
worker-0   Ready    <none>   50m   v1.15.0
worker-1   Ready    <none>   50m   v1.15.0

自分の端末からAPIサーバに接続し、各ワーカーノードの状態を確認できるようになりました。

まとめ

  • リモートからKubernetes クラスタを操作できるようにする
    • ロードバランサの外部IPを指定してkubeconfigに設定
      • admin ユーザとして行うこと


11.に続きます。