LoginSignup
1
0

More than 3 years have passed since last update.

AKS トラブルシュートのために Cluster Node に SSH する

Posted at

AKS の運用をしていると、メンテナンス、トラブルシューティング目的でサーバーへ SSH したくなることがあります。今回の記事では、AKS Cluster Node へ SSH する方法を見ていきたいと思います。

SSH アクセス用の仮想マシンスケールセットを構成する

SSH アクセス用の仮想マシンスケールセットを構成するには、クラスターの仮想マシンスケールセットの名前を見つけ、そのスケールセットに SSH 公開キーを追加する必要があります。
まずは、az aks show コマンドで AKS クラスターのリソースグループ名を取得したあと、az vmss list コマンドでスケールセットの名前を取得します。
※どちらも Azure Portal から確認できるので、すでに把握できいる場合はその値をそのまま挿入します。

CLUSTER_RESOURCE_GROUP=$(az aks show --resource-group myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv)
SCALE_SET_NAME=$(az vmss list --resource-group $CLUSTER_RESOURCE_GROUP --query [0].name -o tsv)

次に、SSH キーを仮想マシンスケールセット内のノードに追加します。以下二つのコマンドで完了します。尚、AKS ノードの規定のユーザー名は azureuser です。

az vmss extension set  \
    --resource-group $CLUSTER_RESOURCE_GROUP \
    --vmss-name $SCALE_SET_NAME \
    --name VMAccessForLinux \
    --publisher Microsoft.OSTCExtensions \
    --version 1.4 \
    --protected-settings "{\"username\":\"azureuser\", \"ssh_key\":\"$(cat ~/.ssh/id_rsa.pub)\"}"

az vmss update-instances --instance-ids '*' \
    --resource-group $CLUSTER_RESOURCE_GROUP \
    --name $SCALE_SET_NAME

スケールセットを追加したあとに、Node の一覧を取得します。Cluster 上で起動している Node 一覧が取得できるので、トラブル対応したい Node の IP アドレスをメモしておきます。

$ kubectl get nodes -o wide
NAME                                STATUS   ROLES   AGE   VERSION    INTERNAL-IP   EXTERNAL-IP   OS-IMAGE  KERNEL-VERSION      CONTAINER-RUNTIME
aks-nodepool1-38358128-vmss000000   Ready    agent   43m   v1.13.12   10.240.0.4    <none>        Ubuntu 16.04.6 LTS  4.15.0-1061-azure   docker://3.0.7
aks-nodepool1-38358128-vmss000001   Ready    agent   43m   v1.13.12   10.240.0.5    <none>        Ubuntu 16.04.6 LTS  4.15.0-1061-azure   docker://3.0.7
aks-nodepool1-38358128-vmss000002   Ready    agent   43m   v1.13.12   10.240.0.6    <none>        Ubuntu 16.04.6 LTS  4.15.0-1061-azure   docker://3.0.7

SSH 接続を作成する

AKS ノードへの SSH 接続を作成するには、AKS クラスターでヘルパー Pod を実行します。ヘルパー Pod を実行することで、クラスターへの SSH アクセスが提供され、SSH ノードアクセスが提供されます。

kubectl run -it --rm aks-ssh --image=debian

ターミナルセッションがコンテナーに接続されるので、apt-get で SSH クライアントをインストールします。

apt-get update && apt-get install openssh-client -y

このコマンドが環境したら、kubectl get pods してみます。SSH 用の Pods が作成されているのが分かります。

$ kubectl get pods
NAME                       READY   STATUS    RESTARTS   AGE
aks-ssh-6fd7758688-l5fhr   1/1     Running   0          36m

SSH キーを Pods にコピーします。そのあとでコンテナーへのターミナルセッションに戻り、id_rsa SSH 秘密キーに対するアクセス許可を読み取り専用に更新します。

kubectl cp ~/.ssh/id_rsa aks-ssh-6fd7758688-l5fhr:/id_rsa (Azure CLI で実行)
chmod 0600 id_rsa (コンテナーターミナルセッションで実行)

ここまで出来たら SSH の準備は完了です。あとは ssh -i id_rsa azureuser@IPアドレス を実施することで、トラブルシュートをしたい Node にアクセスすることが可能です。

参考

メンテナンスまたはトラブルシューティングのために SSH を使用して Azure Kubernetes Service (AKS) クラスター ノードに接続する
https://docs.microsoft.com/ja-jp/azure/aks/ssh#create-the-ssh-connection

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0