vm.gowatana.jp

NEOにほんごVMware(仮)

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

vSphere with Tanzu のスーパーバイザ クラスタに作成した Tanzu Kubernetes クラスタ(TKC)仮想マシンに、踏み台(Jumpbox)として用意した Linux 仮想マシンから SSH で接続してみます。

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

 

今回の内容です。

 

今回の環境

接続先 TKC に関係する情報です。

  • vSphere 8.0 GA(vCenter Server 8.0 GA)
  • スーパーバイザ制御プレーンの IP アドレス: 192.168.131.130
  • vSphere 名前空間: test-ns-21
  • TKC の名前: tkc-01

 

今回は、踏み台 仮想マシン(Jumpbox VM)として Linux(Photon OS 4.0)の仮想マシンを用意してあります。

root@jumpbox-vm-01 [ ~ ]# cat /etc/photon-release
VMware Photon OS 4.0
PHOTON_BUILD_NUMBER=2f5aad892

 

Jumpbox VM には、unzip を tdnf(もしくは yum)でインストールしておきます。

# tdnf install -y unzip

 

1. 踏み台 仮想マシン(Jumpbox VM)の準備

用意しておいた Photon OS の Jumpbox VM に、vNIC 追加と、kubectl インストールを実施しておきます。

 

1-1. vNIC 2 の追加

NSX ネットワークを利用する TKC の仮想マシンは、外部のネットワークから直接アクセスしにくいネットワークに配置されます。そこで Jumpbox VM には、下記のように vNIC 2 を追加しておきます。

  • vNIC 1(eth0): Jumpbox VM に SSH 接続する vNIC。外部から接続できるポートグループを割り当てて、IP アドレスを設定しておく。
  • vNIC 2(eth1): Jumpbox VM → TKC 仮想マシンの SSH 接続で使用する vNIC。TKC 仮想マシンと同じポートグループ に接続しておく。

 

NSX を利用しているスーパーバイザ クラスタでは、TKC を作成するたびにオーバーレイ ネットワークが作成されます。そのため、この Jumpbox VM から SSH する TKC を変更する場合は、都度 vNIC 2 のポートグループと、ゲスト OS での IP アドレス設定を変更する必要があります。

 

一方で、Jumpbox VM から直接ネットワーク接続性がある(vDS ネットワークを利用するスーパーバイザ クラスタの場合などの) TKC 仮想マシンであれば、Jumpbox VM には vNIC 1 のみで十分です。

 

1-2. kubectl と vSphere Plug-in のインストール

今回は、Jumpbox VM から TKC 仮想マシンの情報を確認します。そこで、スーパーバイザ制御プレーン(192.168.131.130)から、kubectl と vSphere Plug-in をダウンロードします。

# curl -k -O https://192.168.131.130/wcp/plugin/linux-amd64/vsphere-plugin.zip

 

ZIP ファイルを展開します。

# unzip vsphere-plugin.zip
Archive:  vsphere-plugin.zip
   creating: bin/
  inflating: bin/kubectl-vsphere
  inflating: bin/kubectl

 

kubectl が展開された bin ディレクトリに PATH を通します。

# export PATH=$(pwd)/bin:$PATH
# echo 'export PATH=$(pwd)/bin:$PATH' >> .bash_profile
# kubectl version --client --short
Client Version: v1.23.5+vmware.wcp.2

 

2. TKC 仮想マシンの SSH 接続情報の確認

kubectl で スーパーバイザ制御プレーンに接続して、TKC 仮想マシンの IP アドレスと SSH パスワードを確認します。

 

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

スーパーバイザ制御プレーンに接続して、コンテキストを TKC を作成した vSphere 名前空間と同名のものに切り替えます。

 

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

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

 

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

# kubectl config use-context test-ns-21

 

作成されている TKC(tkc-01)が確認できます。

# kubectl get tkc
NAME     CONTROL PLANE   WORKER   TKR NAME                           AGE   READY   TKR COMPATIBLE   UPDATES AVAILABLE
tkc-01   1               1        v1.22.9---vmware.1-tkg.1.cc71bc8   37h   True    True             [v1.23.8+vmware.2-tkg.2-zshippable]

 

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

TKC 仮想マシンの IP アドレスは、VirtualMachine リソースで確認できます。

# 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

 

下記のように仮想マシン名(tkc-01-control-plane-9pv4j-n2zxq)と JSON Path を指定すると、IP アドレスのみを取得できます。

# kubectl get vspheremachine tkc-01-control-plane-9pv4j-n2zxq -o jsonpath={.status.vmIp}
10.245.0.34

 

2-3. 接続先 TKC 仮想マシンの SSH パスワードの確認

TKC 仮想マシンのパスワードは、TKC を作成した名前空間に、下記のような名前の Secret リソースに記載されています。

  • <TKC 名>-ssh-password

 

実際には、下記のように「ssh-passwordkey」作成されています。

# kubectl get secrets tkc-01-ssh-password
NAME                  TYPE     DATA   AGE
tkc-01-ssh-password   Opaque   1      37h
# kubectl get secrets tkc-01-ssh-password -o yaml
apiVersion: v1
data:
  ssh-passwordkey: SGxka3JiVjJkakJzT0dtcUNNZTFHSnVvekdLdCsyTzREMWZTWVJ0bE9nND0=
kind: Secret
metadata:
  creationTimestamp: "2023-04-05T10:02:55Z"
  name: tkc-01-ssh-password
  namespace: test-ns-21
  ownerReferences:
  - apiVersion: run.tanzu.vmware.com/v1alpha3
    kind: TanzuKubernetesCluster
    name: tkc-01
    uid: 19264213-c254-4fda-be22-d2d24f66c016
  resourceVersion: "98313"
  selfLink: /api/v1/namespaces/test-ns-21/secrets/tkc-01-ssh-password
  uid: f774f5e8-a325-4220-8ddc-78e198cc5387
type: Opaque

 

ssh-passwordkey の文字列は、base64 でエンコードされています。

# kubectl get secrets tkc-01-ssh-password -o jsonpath={.data.ssh-passwordkey} | more
SGxka3JiVjJkakJzT0dtcUNNZTFHSnVvekdLdCsyTzREMWZTWVJ0bE9nND0=

 

これを下記のようにデコード(base64 -d)することで、TKC の OS ユーザ(vmware-system-user)のパスワードがわかります。

# kubectl get secrets tkc-01-ssh-password -o jsonpath={.data.ssh-passwordkey} | base64 -d | more
HldkrbV2djBsOGmqCMe1GJuozGKt+2O4D1fSYRtlOg4=

 

3. TKC 仮想マシンへの SSH 接続

それでは、Jumpbox VM から、SSH 接続してみます。

 

3-1. vNIC 2 への IP アドレス設定

前の手順で確認した TKC の制御プレーン 仮想マシンの IP アドレスは、10.245.0.32/28 ネットワークの「10.245.0.34」でした。

そこで、Jumpbox VM の vNIC 2(eth1)に、TKC 仮想マシンと同じネットワークの未使用 IP アドレス(今回は 10.245.0.39/28)を設定します。

# ip addr add dev eth1 10.245.0.39/28
# ip addr show dev eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:50:56:8c:51:0f brd ff:ff:ff:ff:ff:ff
    altname eno2
    altname enp19s0
    altname ens224
    inet 10.245.0.39/28 scope global eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::250:56ff:fe8c:510f/64 scope link
       valid_lft forever preferred_lft forever

 

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

TKC 仮想マシンには、vmware-system-user ユーザで SSH 接続します。

パスワード文字列が長すぎるため、キーボードでの入力だとおそらくタイムアウトするので、コピー & ペーストなどで入力するとよいと思います

# ssh vmware-system-user@10.245.0.34
The authenticity of host '10.245.0.34 (10.245.0.34)' can't be established.
ED25519 key fingerprint is SHA256:yWhssz45wmiNZWJztCBgNL7sS1z7FoIS42TWuR2A2K8.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes ★初回は yes を入力
Warning: Permanently added '10.245.0.34' (ED25519) to the list of known hosts.
Welcome to Photon 3.0 (\m) - Kernel \r (\l)
vmware-system-user@10.245.0.34's password: ★SSH パスワードを入力
Last login: Fri Apr  7 00:04:07 2023 from 10.245.0.39
 00:05:08 up 1 day, 13:44,  0 users,  load average: 0.30, 0.25, 0.27

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

 

TKC 仮想マシンの内部からでも、Kubernetes クラスタの状態を確認できたりします。

vmware-system-user@tkc-01-pgh7s-5sbng [ ~ ]$ sudo su -
root@tkc-01-pgh7s-5sbng [ ~ ]# kubectl --kubeconfig=/etc/kubernetes/admin.conf get nodes
NAME                                   STATUS   ROLES                  AGE   VERSION
tkc-01-pgh7s-5sbng                     Ready    control-plane,master   37h   v1.22.9+vmware.1
tkc-01-worker-d4mn9-78f9f675bc-p4pwp   Ready                     37h   v1.22.9+vmware.1

 

ちなみに、TKC を再作成する場合は SSH 公開キーが変更されるため、SSH 接続時にエラーになったりします。これは、都度 $HOME/.ssh/known_hosts ファイルから古いキーを削除するか、SSH で「-o StrictHostKeyChecking=no」オプションを指定することで回避できます。

# ssh -o StrictHostKeyChecking=no vmware-system-user@10.245.0.34
Warning: Permanently added '10.245.0.34' (ED25519) to the list of known hosts.
Welcome to Photon 3.0 (\m) - Kernel \r (\l)
vmware-system-user@10.245.0.34's password:

 

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

vSphere Pod から SSH 接続する様子はこちら。