はじめに
Catalyst Center は Kubernetes プラットフォーム上に Pod として動作しているサービス群から構成されています。
本ドキュメントでは、Pod にアクセスする手順について説明します。
当手順は Physical Appliance Ver 2.3.5.5 をベースに作成しています。モデルやバージョンによって動作が異なる場合があります。
Ver 2.3.7 以降、及び 仮想アプライアンス版 は、Restricted Shell からの Pod アクセス権限は無いため、下記手順を参考に Consent Token で Bash に遷移してから実施する必要があります。(詳細は備考欄に記載しています)
DNAC: magshell (Restricted Shell) の概要と bash 使用手順
手順
1. アクセス対象の Pod の確認
Pod の一覧は下記のコマンドで確認できます。アクセス対象 Pod の NAMESPACE, NAME を控えます。
$ magctl appstack status
READY 項には、Pod 内で動作しているの Container の数が表示されています。
例:
$ magctl appstack status
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
ai-network-analytics kairos-agent-7d64c8c689-fk2zz 1/1 Running 0 24d 169.254.45.54 192.0.2.32 <none> <none>
app-hosting app-hosting-ccf8fb66b-k65fj 1/1 Running 1 27d 169.254.41.168 192.0.2.31 <none> <none>
補足:下記のコマンドでも Pod 一覧を確認できますが、magctl appstack status コマンドの方がより多くの Pod がリストされます。
$ magctl service display
2. Pod アクセス
READY X/X の値によって手順が若干異なります。
READY 1/1 の場合
下記のコマンドでアクセスします。
$ magctl service attach -a <NAMESPACE> <NAME>
例:
$ magctl service attach -a maglev-system platform-ui-5bd5f4b45b-4z4pg
Attaching to 'maglev-system/platform-ui-5bd5f4b45b-4z4pg'
root@platform-ui-5bd5f4b45b-4z4pg:/#
補足:基本的に -a <NAMESPACE> が無くてもアクセスできますが、同じ Pod 名の Pod が複数の Namespace に存在する場合は、-a <NAMESPACE> が必要となります。
READY 2/2 以上の場合
<CONTAINER_NAME> を確認します。
$ magctl service status -a <NAMESPACE> <NAME>
このコマンド出力から、CONTAINER_NAME を確認します。grep コマンドで抜粋して表示も可能です。
その後、下記のコマンドでアクセスします。(Pod 内で動作している特定のコンテナを指定してアクセスします)
$ magctl service attach -a <NAMESPACE> <NAME> -c <CONTAINER_NAME>
例:
$ magctl appstack status | grep workflow-server-684f6fd98c-bzgg6
maglev-system workflow-server-684f6fd98c-bzgg6 2/2 Running 0 24d 169.254.41.121 192.0.2.31 <none> <none>
$ magctl service status -a maglev-system workflow-server-684f6fd98c-bzgg6 | grep CONTAINER_NAME
CONTAINER_NAME: workflow-server
CONTAINER_NAME: workflow-flower
$ magctl service attach -a maglev-system workflow-server-684f6fd98c-bzgg6 -c workflow-flower
Attaching to 'maglev-system/workflow-server-684f6fd98c-bzgg6'
root@workflow-server-684f6fd98c-bzgg6:/#
補足:-c <CONTAINER_NAME> が無くてもアクセスできますが、その場合 Pod 内のデフォルトとして設定されているコンテナへアクセスされます。
備考:Pod アクセス権限について
・先述の通り Ver 2.3.7 以降、及び 仮想アプライアンス版 は、Restricted Shell からの Pod アクセス権限は無いため、Consent Token で Bash に遷移してから実施する必要があります。
下記は、Restricted Shell からの Pod アクセス権限 によるエラー例です。
Ver 2.3.7
$ magctl service attach -a ndp elasticsearch-0 -c elasticsearch
ERROR: Command execution is not allowed
仮想アプライアンス版
$ magctl service attach -a ndp elasticsearch-data-0
Defaulted container "elasticsearch" out of: elasticsearch, sysctl (init), chown (init), configure-zone (init)
Error from server (Forbidden): pods "elasticsearch-data-0" is forbidden: User "system:serviceaccount:default:shell-user" cannot create resource "pods/exec" in API group "" in the namespace "ndp"
上記の場合は、Consent Token で Bash に遷移する必要があります。Bash 遷移後は、magctl コマンドでアクセス可能です。
また、magctl コマンドの wrapper 元となっております、kubectl コマンドが使用できるため、下記 kubectl コマンドでも Pod アクセス可能です。
$ kubectl exec -it -n <NAMESPACE> <POD> -- /bin/bash
コンテナ指定する場合
$ kubectl exec -it -n <NAMESPACE> <POD> -c <CONTAINER> -- /bin/bash
例:
maglev@maglev-master-169-254-6-66:~$ kubectl exec -it -n ndp elasticsearch-data-0 -- bash
Defaulted container "elasticsearch" out of: elasticsearch, sysctl (init), chown (init), configure-zone (init)
elasticsearch@elasticsearch-data-0:~$
・Pod によっては、2.3.5 以前でも Pod 独自にアクセス権限が付与されており、アクセス出来ない場合があります。
下記は、Pod 独自にアクセス権限が付与されている場合 のエラー例です。
$ magctl service attach -a fusion postgres-0 -c postgres
Attaching to 'fusion/postgres-0'
Error from server (Forbidden): pods "postgres-0" is forbidden: cannot exec into or attach to a privileged container
上記の場合は、Docker 経由(-D オプション)でアクセス可能なケースがあります。
$ magctl service attach -a <NAMESPACE> -D <NAME>
コンテナ指定する場合
$ magctl service attach -a <NAMESPACE> -D <NAME> -i <IMAGE>
例:
$ magctl service attach -a fusion -D postgres-0
ERROR: Multiple matches found. Specify an image name
maglev-registry.maglev-system.svc.cluster.local:5000/postgres-9.6:1.7.23
maglev-registry.maglev-system.svc.cluster.local:5000/postgres-sidecar:1.7.86
maglev-registry.maglev-system.svc.cluster.local:5000/postgres-proxy:1.7.31
Pod 内に複数のコンテナが動作している場合は、上記のようにコンテナイメージがリストされます。
その場合は、-i オプションで、コンテナイメージを選択してアクセスします。
$ magctl service attach -a fusion -D postgres-0 -i maglev-registry.maglev-system.svc.cluster.local:5000/postgres-9.6:1.7.23
Attaching to 'fusion/postgres-0'
root@postgres-2:/#