vm.gowatana.jp

NEOにほんごVMware(仮)

vSphere with Tanzu の TKC 仮想マシンに SSH 接続してみる。(vSphere Pod 編)

vSphere with Tanzu のスーパーバイザ クラスタに作成した Tanzu Kubernetes クラスタ(TKC)仮想マシンに、vSphere Pod から SSH で接続してみます。kubectl でスーパーバイザ制御プレーンにアクセスできる環境であれば、前回の Jumpbox VM を用意するケース より手軽に、TKC 仮想マシンに SSH して様子を見ることができます。

ただし vSphere Pod を利用するため、スーパーバイザ クラスタのネットワーク スタックとして vDS ではなく、NSX を利用している必要があります。

ドキュメントでは、下記のあたりです。

 

今回の内容です。

 

今回の環境

今回のスーパーバイザ / TKC は、下記と同様の環境を利用しています。kubectl の実行環境として Jumpbox VM を流用していますが、vNIC 1 からスーパーバイザ制御プレーンにアクセスできるネットワーク環境にしてあるため、vNIC 2 の追加は不要です。

 

vSphere Pod を作成して、そこから TKC 仮想マシンに SSH 接続します。

 

1. vSphere Pod の YAML ファイルの作成

今回は、下記のような YAML ファイルを作成しておきます。

tkc-01-jumpbox-a.yml

  • ドキュメントでも紹介されている、Docker Hub にある Photon OS 3.0 のコンテナ イメージ(photon:3.0)を利用します。
  • photon:3.0 イメージには ssh コマンドが含まれていないので、それが含まれている openssh-server をインストールします。
  • TKC が作成されている Namespace に生成された tkc-01-ssh Secret リソースに含まれる SSH 秘密鍵を、vSphere Pod に /root/.ssh/id_rsa ファイルとして配置します。
  • コンテナ起動時に実行するコマンドは、改行して見やすい書き方にしてありますが、ドキュメントにある YAML の例と同様の処理です。

gist.github.com

 

ちなみに、vSphere Pod に Mount する <TKC 名>-ssh という Secret リソースは、下記のような内容になっています。

root@jumpbox-vm-01 [ ~ ]# kubectl config current-context
test-ns-21
root@jumpbox-vm-01 [ ~ ]# kubectl get secrets tkc-01-ssh -o yaml
apiVersion: v1
data:
  ssh-privatekey: LS0tLS1CRUdJTiBSU0~RFIEtFWS0tLS0tCg==
kind: Secret
metadata:
  creationTimestamp: "2023-04-05T10:02:55Z"
  name: tkc-01-ssh
  namespace: test-ns-21
  ownerReferences:
  - apiVersion: run.tanzu.vmware.com/v1alpha3
    kind: TanzuKubernetesCluster
    name: tkc-01
    uid: 19264213-c254-4fda-be22-d2d24f66c016
  resourceVersion: "98312"
  selfLink: /api/v1/namespaces/test-ns-21/secrets/tkc-01-ssh
  uid: f9c64890-ed06-4a39-8136-8e43bac9ab18
type: kubernetes.io/ssh-auth

 

Secret の .data.ssh-privatekey には、SSH 秘密鍵が base64 エンコーディングされています。今回の手順ではあえて確認する必要はありませんが、下記のようにデコードできます。

root@jumpbox-vm-01 [ ~ ]# kubectl get secrets tkc-01-ssh -o jsonpath={.data.ssh-privatekey} | base64 -d | head -n 5
-----BEGIN RSA PRIVATE KEY-----
MIIJKgIBAAKCAgEAxA1bXY1TBinFrTAKpvpfC96wNxnvLgGjmjChUbA+ELrqyAmR
U2FZRNWZxpuKmOlW84A+3uakPszw3Qx5CnmZlbi1nOQ/SInsL+eYM+rhfai02E/S
1HCRhQAdH0gti3pbRmegPddi4suVVH0YdgQnRJAJrUOH7ptsco7aYiLlCSWSKT6f
5VgGmAfaLXKGJmIjo9sBWG3BY735/ZDKoEtymNx5DokTZLXoQCTQh3pgIe5Gm8kD

 

2. vSphere Pod から TKC への SSH

kubectl でスーパーバイザ制御プレーンに vSphere Pod を作成し、そこから SSH で TKC 仮想マシンに接続します。kubectl(と vSphere Plug-in)は前回の投稿でインストールずみのものを利用します。

 

2-1. スーパーバイザ制御プレーンへの接続

スーパーバイザ制御プレーン(192.168.131.130)に login します。

# kubectl vsphere login --insecure-skip-tls-verify --server=192.168.131.130

 

TKC を作成してある vSphere 名前空間と同名のコンテキスト(test-ns-21)に切り替えます。

# kubectl config use-context test-ns-21

 

2-2. 接続先 TKC 仮想マシンの IP アドレスの確認

TKC 仮想マシンの IP アドレスを、vsphereMachine リソースから確認しておきます。

root@jumpbox-vm-01 [ ~ ]# kubectl get vspheremachine
NAME                               ZONE       PROVIDERID                                       IPADDR
tkc-01-control-plane-9pv4j-n2zxq   vzone-04   vsphere://420c6e40-4397-199f-4507-abfb491d1f0c   10.245.0.34
tkc-01-worker-infra-758dl-tk6dr               vsphere://420c68bf-7a46-3c96-e5bc-43f1b6ddad16   10.245.0.35

 

今回は、IP アドレスを VMIP という変数に格納しておきます。

root@jumpbox-vm-01 [ ~ ]# VMIP=$(kubectl get vspheremachine tkc-01-control-plane-9pv4j-n2zxq -o jsonpath={.status.vmIp})
root@jumpbox-vm-01 [ ~ ]# echo $VMIP
10.245.0.34

 

2-3. vSphere Pod の作成

事前に作成しておいてた YAML ファイルで、vSphere Pod を作成します。

root@jumpbox-vm-01 [ ~ ]# kubectl apply -f tkc-01-jumpbox-a.yml
pod/tkc-01-jumpbox-a created

 

少し待つと vSphere Pod が作成されて、STATUS が Running になります。

root@jumpbox-vm-01 [ ~ ]# kubectl get pods
NAME               READY   STATUS    RESTARTS   AGE
tkc-01-jumpbox-a   1/1     Running   0          22s

 

vSphere Client でも、vSphere Pod が作成されたことが確認できます。

 

作成された vSphere Pod には、YAML ファイルに記載しておいたとおり SSH の秘密鍵が配置されています。

root@jumpbox-vm-01 [ ~ ]# kubectl exec tkc-01-jumpbox-a -- head -n 5 /root/.ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----
MIIJKgIBAAKCAgEAxA1bXY1TBinFrTAKpvpfC96wNxnvLgGjmjChUbA+ELrqyAmR
U2FZRNWZxpuKmOlW84A+3uakPszw3Qx5CnmZlbi1nOQ/SInsL+eYM+rhfai02E/S
1HCRhQAdH0gti3pbRmegPddi4suVVH0YdgQnRJAJrUOH7ptsco7aYiLlCSWSKT6f
5VgGmAfaLXKGJmIjo9sBWG3BY735/ZDKoEtymNx5DokTZLXoQCTQh3pgIe5Gm8kD

 

2-4. TKC 仮想マシンへの SSH 接続

TKC 仮想マシンに、vmware-system-user ユーザで SSH 接続を試みると、パスワード入力なしでログインできるはずです。IP アドレスは、変数($VMIP)でしていますが、直接 10.245.0.34 などを指定してもかまいません。

root@jumpbox-vm-01 [ ~ ]# kubectl exec -it tkc-01-jumpbox-a -- ssh vmware-system-user@$VMIP
The authenticity of host '10.245.0.34 (10.245.0.34)' can't be established.
ECDSA key fingerprint is SHA256:HJUzQWwsTG3fFHAKzkX02p8JYUa1pOTddG8ox/d6R3A.
Are you sure you want to continue connecting (yes/no)? yes ★初回のみ入力
Warning: Permanently added '10.245.0.34' (ECDSA) to the list of known hosts.
Welcome to Photon 3.0 (\m) - Kernel \r (\l)
Last login: Sun Apr  9 07:02:48 2023 from 10.245.0.21
 07:09:29 up 3 days, 20:48,  0 users,  load average: 0.11, 0.25, 0.32

33 Security notice(s)
Run 'tdnf updateinfo info' to see the details.
vmware-system-user@tkc-01-pgh7s-5sbng [ ~ ]$

 

2-4. vSphere Pod の削除

vSphere Pod は、不要になったら kubectl delete pod などで削除しておきます。

vmware-system-user@tkc-01-pgh7s-5sbng [ ~ ]$ exit
logout
Connection to 10.245.0.34 closed.
root@jumpbox-vm-01 [ ~ ]# kubectl delete pod tkc-01-jumpbox-a
pod "tkc-01-jumpbox-a" deleted

 

おまけ

今回は vSphere Pod のイメージとして Docker Hub の photon:3.0 を利用していますが、トラブルシュートに利用するツールなどをあらかじめインストールしてあるコンテナ イメージを用意しておくと便利かなと思います。

たとえば私は、使い慣れた CentOS 7 のイメージを利用したりしています。

tkc-01-jumpbox-b.yml

  • コンテナ イメージは、ghcr.io/gowatana/centos7:latest
  • イメージに ssh コマンドが含まれるので、YAML ファイルでは ssh インストールを記載しない。

gist.github.com

 

vSphere Pod を作成すると、CentOS 7.9 のコンテナが起動されます。

root@jumpbox-vm-01 [ ~ ]# kubectl apply -f tkc-01-jumpbox-b.yml
root@jumpbox-vm-01 [ ~ ]# kubectl exec -it tkc-01-jumpbox-b -- bash
[root@tkc-01-jumpbox-b /]# cat /etc/centos-release
CentOS Linux release 7.9.2009 (Core)
[root@tkc-01-jumpbox-b /]# exit
exit
root@jumpbox-vm-01 [ ~ ]#

 

SSH 接続の方法も、photon:3.0 イメージの場合と同様です。

root@jumpbox-vm-01 [ ~ ]# kubectl exec -it tkc-01-jumpbox-b -- ssh -o StrictHostKeyChecking=no vmware-system-user@$VMIP
Welcome to Photon 3.0 (\m) - Kernel \r (\l)
Last login: Sun Apr  9 07:20:08 2023 from 10.245.0.19
 07:20:43 up 3 days, 20:59,  0 users,  load average: 0.57, 0.47, 0.37

33 Security notice(s)
Run 'tdnf updateinfo info' to see the details.
vmware-system-user@tkc-01-pgh7s-5sbng [ ~ ]$

 

以上、vSphere Pod から TKC 仮想マシンに SSH 接続してみる話でした。