星期日, 3月 07, 2021

使用 ssh 連線到 Azure AKS 叢集節點小記

使用 ssh 連線到 Azure AKS 叢集節點小記


今年因為 Kubernetes Up and Running 第2版, 讀書會再開

今天來小記一下, 如果要使用 ssh 連線到 AKS 叢集的 node 該如何作


參考官方文件 https://docs.microsoft.com/zh-tw/azure/aks/ssh


另外知道 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: