プライベート キーを使用して、vmware-system-user として Tanzu Kubernetes クラスタ ノードに SSH で接続できます。

vmware-system-user ユーザーとして任意の Tanzu Kubernetes クラスタ ノードに SSH で接続できます。SSH プライベート キーを含むシークレットには、CLUSTER-NAME-ssh という名前が付いています。詳細については、『Tanzu Kubernetes クラスタのシークレットの取得』を参照してください。

プライベート キーを使用して SSH 経由で Tanzu Kubernetes クラスタ ノードに接続するには、スーパーバイザー クラスタ にジャンプ ボックス vSphere ポッド を作成します。

前提条件

このタスクでは、SSH 接続のジャンプ ホストとして vSphere ポッド をプロビジョニングします。 vSphere ポッド では、 スーパーバイザー クラスタ 用に NSX-T ネットワークが必要です。 スーパーバイザー クラスタ 用に Distributed Switch ネットワークを使用している場合は、 パスワードを使用した、システム ユーザーとしての Tanzu Kubernetes クラスタ ノードへの SSH 接続に記載された方法を代わりに使用します。

手順

  1. スーパーバイザー クラスタ に接続します。
  2. NAMESPACE という名前の環境変数を作成し、値に、ターゲット Tanzu Kubernetes クラスタがプロビジョニングされている vSphere 名前空間 の名前を指定します。
    export NAMESPACE=VSPHERE-NAMESPACE
  3. Tanzu Kubernetes クラスタがプロビジョニングされている vSphere 名前空間 にコンテキストを切り替えます。
    kubectl config use-context $NAMESPACE
  4. TKGS-CLUSTER-NAME-ssh シークレット オブジェクトを表示します。
    kubectl get secrets
  5. 次の jumpbox.yaml を使用して、vSphere ポッド を作成します。
    namespace 値の YOUR-NAMESPACE を、ターゲット クラスタがプロビジョニングされている vSphere 名前空間 に置き換えます。 secretName 値の YOUR-CLUSTER-NAME-ssh をターゲット クラスタの名前に置き換えます。
    apiVersion: v1
    kind: Pod
    metadata:
      name: jumpbox
      namespace: YOUR-NAMESPACE     #REPLACE
    spec:
      containers:
      - image: "photon:3.0"
        name: jumpbox
        command: [ "/bin/bash", "-c", "--" ]
        args: [ "yum install -y openssh-server; mkdir /root/.ssh; cp /root/ssh/ssh-privatekey /root/.ssh/id_rsa; chmod 600 /root/.ssh/id_rsa; while true; do sleep 30; done;" ]
        volumeMounts:
          - mountPath: "/root/ssh"
            name: ssh-key
            readOnly: true
        resources:
          requests:
            memory: 2Gi
      volumes:
        - name: ssh-key
          secret:
            secretName: YOUR-CLUSTER-NAME-ssh     #REPLACE 
    
  6. jumpbox.yaml の仕様を適用して、ポッドをデプロイします。
    kubectl apply -f jumpbox.yaml
    pod/jumpbox created
  7. ポッドが実行されていることを確認します。
    kubectl get pods
    NAME      READY   STATUS    RESTARTS   AGE
    jumpbox   1/1     Running   0          3h9m
    
    注: vSphere 名前空間 内の vCenter Server のジャンプボックス ポッドも確認する必要があります。
  8. 次の一連のコマンドを実行して、ターゲット クラスタ ノードの IP アドレスを持つ環境変数を作成します。
    1. ターゲット仮想マシンの名前を取得します。
      kubectl get virtualmachines
    2. 値がターゲット ノードの名前である VMNAME 環境変数を作成します。
      export VMNAME=NAME-OF-THE-VIRTUAL-MACHINE
    3. 値がターゲット ノード仮想マシンの IP アドレスである VMIP 環境変数を作成します。
      export VMIP=$(kubectl -n $NAMESPACE get virtualmachine/$VMNAME -o jsonpath='{.status.vmIp}')
  9. 次のコマンドを実行して、ジャンプ ボックス ポッドを使用してクラスタ ノードに SSH 接続します。
    kubectl exec -it jumpbox  /usr/bin/ssh vmware-system-user@$VMIP
    重要: コンテナを作成してソフトウェアをインストールするには、約 60 秒かかります。「error executing command in container: container_linux.go:370: starting container process caused: exec: "/usr/bin/ssh": stat /usr/bin/ssh: no such file or directory」というエラーが表示された場合は、数秒後に再実行してください。
  10. yes を入力して、ホストの信頼性を確認します。
    The authenticity of host '10.249.0.999 (10.249.0.999)' can't be established.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '10.249.0.999' (ECDSA) to the list of known hosts.
    Welcome to Photon 3.0
     
  11. ターゲット ノードに vmware-system-user としてログインしていることを確認します。
    たとえば、次の出力は、システム ユーザーとして制御プレーン ノードにログインしていることを示しています。
    vmware-system-user@tkgs-cluster-1-control-plane-66tbr [ ~ ]$
    
  12. ノードで必要な操作を実行します。
    注目: kubelet の再起動などの特定の処理をノードで実行するには、 sudo または sudo su を使用しなければならない場合があります。
  13. 操作完了後、exit を入力し、vSphere ポッド の SSH セッションからログアウトします。
  14. ポッドを削除するには、kubectl delete pod jumpbox コマンドを実行します。
    注意: セキュリティを確保するには、作業の完了後にジャンプボックス ポッドを削除することを検討してください。必要に応じて、後でポッドを再作成できます。