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

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

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

前提条件

このタスクでは、SSH 接続のジャンプ ホストとして vSphere ポッド をプロビジョニングします。 vSphere ポッド を使用するには、 スーパーバイザー の NSX ネットワークが必要です。 スーパーバイザー に Distributed Switch ネットワークを使用している場合は、 パスワードを使用した、システム ユーザーとしての TKG サービス クラスタ ノードへの SSH 接続を参照してください。

手順

  1. スーパーバイザー に接続します。
  2. NAMESPACE という名前の環境変数を作成し、値に、ターゲット TKG クラスタがプロビジョニングされている vSphere 名前空間 の名前を指定します。
    export NAMESPACE=VSPHERE-NAMESPACE
  3. Tanzu Kubernetes クラスタがプロビジョニングされている vSphere 名前空間 にコンテキストを切り替えます。
    kubectl config use-context $NAMESPACE
  4. TKG-CLUSTER-NAME-ssh シークレット オブジェクトを表示します。
    kubectl get secrets
  5. Docker Hub レジストリ認証情報シークレットを作成します。
    デフォルトでは、vSphere Pod (PhotonOS) の作成に使用するイメージは Docker Hub からプルされます。イメージを正常にプルするには、認証情報シークレットが必要になる場合があります。 プライベート レジストリ認証情報シークレットの作成を参照してください。
  6. 次の 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 
      imagePullSecrets:
        - name: regcred
    
  7. jumpbox.yaml の仕様を適用して、ポッドをデプロイします。
    kubectl apply -f jumpbox.yaml
    pod/jumpbox created
  8. ポッドが実行されていることを確認します。
    kubectl get pods
    NAME      READY   STATUS    RESTARTS   AGE
    jumpbox   1/1     Running   0          3h9m
    
    注: vSphere 名前空間 内の vCenter Server のジャンプボックス ポッドも確認する必要があります。
  9. 次の一連のコマンドを実行して、ターゲット クラスタ ノードの 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}')
  10. 次のコマンドを実行して、ジャンプ ボックス ポッドを使用してクラスタ ノードに 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」というエラーが表示された場合は、数秒後に再実行してください。
  11. 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
     
  12. ターゲット ノードに vmware-system-user としてログインしていることを確認します。
    たとえば、次の出力は、システム ユーザーとして制御プレーン ノードにログインしていることを示しています。
    vmware-system-user@tkg-cluster-1-control-plane-66tbr [ ~ ]$
    
  13. ノードで必要な操作を実行します。
    注目: kubelet の再起動などの特定の処理をノードで実行するには、 sudo または sudo su を使用しなければならない場合があります。
  14. 操作完了後、exit を入力し、vSphere ポッド の SSH セッションからログアウトします。
  15. ポッドを削除するには、kubectl delete pod jumpbox コマンドを実行します。
    注意: セキュリティを確保するには、作業の完了後にジャンプボックス ポッドを削除することを検討してください。必要に応じて、後でポッドを再作成できます。