使用 ssh 連線到 Azure AKS 叢集節點小記
今年因為 Kubernetes Up and Running 第2版, 讀書會再開
今天來小記一下, 如果要使用 ssh 連線到 AKS 叢集的 node 該如何作
參考官方文件 https://docs.microsoft.com/zh-tw/azure/aks/ssh
之前建立 AKS 方式, 是使用 az 指令建立 ( 可以參考之前文章 http://sakananote2.blogspot.com/2018/07/kubernetes-in-azure-with-opensuse-leap.html )
所以是用 VMSS 的方式來進行節點縮放, 但是目前官方文件的 az vm list 是無法列出 VMSS 的 instance, 所以要注意
另外知道 AKS node 的所屬 Resource Group 之後, 也許會想要直接用 Cloud Shell 來進行連線
這個可能是有困難的, 因為所屬的網段不同, 有可能有 VNet 對 VNet 的連線或是防火牆的問題
再來就是 Resource Group 的概念
我這邊劃個簡圖, 如果使用 az aks 指令建立 K8S Cluster
AKS 是在 study2021 的 Resource Group 建立
但是在建立 AKS 的時候, 其實會同時建立另外一個 Resource Group MC_study2021_AKScluster_eastus
紀錄這個是讓自己記得 cluster node 的 Resource Group 未必是 AKS 的 Resource Group
AKS 的叢集節點就是建立在這個 Resource Group, 以 VMSS 方式控制
當然這個 Resource Group 裡面還有 LB, VNet, 等等就不贅述
接下來取得 SSH 要連線的相關資訊
因為如同剛剛描述的官方文件 vm list 指令, 無法列出 node (vmss instance) 相關資訊
所以我採取使用 kubectl 方式來取得
要觀察該 node 的內部 IP 方式
確認 node
> kubectl get nodes
NAME STATUS ROLES AGE VERSION
aks-nodepool1-11173823-vmss000000 Ready agent 61d v1.18.10
使用 kubectl describe nodes 指令確認相關資訊
> kubectl describe nodes aks-nodepool1-11173823-vmss000000
Name: aks-nodepool1-11173823-vmss000000
Roles: agent
Labels: agentpool=nodepool1
beta.kubernetes.io/arch=amd64
beta.kubernetes.io/instance-type=standard_b2s
beta.kubernetes.io/os=linux
failure-domain.beta.kubernetes.io/region=eastus
failure-domain.beta.kubernetes.io/zone=0
kubernetes.azure.com/cluster=MC_study2021_AKScluster_eastus
kubernetes.azure.com/mode=system
kubernetes.azure.com/node-image-version=AKSUbuntu-1804-2020.12.15
kubernetes.azure.com/role=agent
kubernetes.io/arch=amd64
kubernetes.io/hostname=aks-nodepool1-11173823-vmss000000
kubernetes.io/os=linux
kubernetes.io/role=agent
node-role.kubernetes.io/agent=
node.kubernetes.io/instance-type=standard_b2s
storageprofile=managed
storagetier=Premium_LRS
topology.kubernetes.io/region=eastus
topology.kubernetes.io/zone=0
略....
Addresses:
Hostname: aks-nodepool1-11173823-vmss000000
InternalIP: 10.240.0.4
略....
這邊可以觀察到 內部 IP
接下來確認 AKS 的 adminUsername ( 預設是 azureuser )
> az aks show --resource-group study2021 --name AKScluster | grep adminUsername
"adminUsername": "azureuser",
接下來建立一個臨時的 POD 來連接 SSH 到 node
> kubectl run -it --rm aks-ssh --image=debian
這邊有下 --rm 選項, 所以離開的時候就會刪除該 POD
aks-ssh 是名稱
==== 在 aks-ssh 容器內 ====
安裝 openssh client
# apt-get update && apt-get install openssh-client -y
======================================================
==== 在自己機器上 ====
在自己機器上(可以連線AKS SSH )
用新視窗 使用 kubectl cp 指令複製 SSH Key 到 POD 內
> kubectl cp ~/.ssh/id_rsa aks-ssh:/id_rsa
ask-ssh 是 pod 名稱
複製過去的時候權限是 600
======================================================
==== 在 aks-ssh 容器內 ====
修改剛剛從主機複製過來的 id_rsa key 權限爲 400
# chmod 400 /id_rsa
進行 SSH 連線測試
# ssh -i /id_rsa azureuser@10.240.0.4
10.240.0.4 換成 node IP
就可以連入該 node 進行觀察
Authorized uses only. All activity may be monitored and reported.
Welcome to Ubuntu 18.04.5 LTS (GNU/Linux 5.4.0-1034-azure x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
* Introducing self-healing high availability clusters in MicroK8s.
Simple, hardened, Kubernetes for production, from RaspberryPi to DC.
https://microk8s.io/high-availability
* Canonical Livepatch is available for installation.
- Reduce system reboots and improve kernel security. Activate at:
https://ubuntu.com/livepatch
59 packages can be updated.
0 updates are security updates.
New release '20.04.2 LTS' available.
Run 'do-release-upgrade' to upgrade to it.
*** System restart required ***
Last login: Sun Mar 7 03:39:19 2021 from 10.244.0.22
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
azureuser@aks-nodepool1-11173823-vmss000000:~$
完成時,exit SSH 工作階段,然後 exit 互動式容器工作階段。 這個容器工作階段關閉時,會刪除用來從 AKS 叢集存取 SSH 的 Pod
因為剛剛在 kubectl run 有加上 --rm
這樣又前進 AKS 一小步
~ enjoy it
Reference: