ArgoCDでのWeb Terminalは、ArgoCD ver 2.4から導入された新しい機能です。 これまでもUIへの機能追加は行われており、Kubernetesリソースのマニフェストの表示やログの出力などをサポートしていました。今回のリリースにより、起動中のPodに含まれるコンテナ上でshellを開始することができるようになりました。
これまで起動中のPodでのトラブル調査を行う際は、ArgoCD UIとは別のインターフェイスからPodにアクセスする必要がありましたが、この機能によりArgoCD UI上で作業を完結できるケースを増やせると期待できます。
検証環境
Web Terminal機能を利用するために、あらかじめArgoCDをデプロイしたKubernetes環境を用意します。つい先日ArgoCD ver 2.5がリリースされたので、こちらを使ってみました。
あらかじめサンプル用のアプリケーションを作成しておきます。
※参考: ArgoCD Document - Getting Started
Web-based Terminalを試す
ここからWeb terminalを利用するため、設定変更を行います。
Web terminalを利用するためには、Web terminalの機能を有効にするのに加え、ArgoCDとユーザーの権限を変更する必要があります。
1. Web terminalの機能の有効化
Web terminalはセキュリティの観点から、デフォルトでは無効になっています。有効にするには argocd-cm
ConfigMapに以下の項目を追加し、設定を変更します。
$ kubectl edit cm argocd-cm -n argocd # 以下の項目を追加 data: exec.enabled: "true" # 変更を保存 configmap/argocd-cm edited # 変更後 $ kubectl get cm argocd-cm -n argocd -oyaml apiVersion: v1 data: exec.enabled: "true" kind: ConfigMap metadata: annotations: kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"v1","kind":"ConfigMap","metadata":{"annotations":{},"labels":{"app.kubernetes.io/name":"argocd-cm","app.kubernetes.io/part-of":"argocd"},"name":"argocd-cm","namespace":"argocd"}} creationTimestamp: "2022-10-28T01:21:48Z" labels: app.kubernetes.io/name: argocd-cm app.kubernetes.io/part-of: argocd name: argocd-cm namespace: argocd resourceVersion: "5528" uid: 3446d288-a15e-4ca5-96ee-68225e5c82f1
※参考: GitHub: argoproj/argo-cd - argocd-cm.yaml
2. ArgoCDの権限変更
次に、argocd-server
Podで exec
を利用するため、RoleまたはClusterRoleの設定を変更します。今回は こちらのドキュメント の通りArgoCDをインストールしており、Clusterに対する権限が付与されているため、 ClusterRoleのほうを修正します。
argocd-server
ClusterRoleを修正し、以下の権限を追加します。
$ kubectl edit clusterrole argocd-server # 以下の項目を追加 - apiGroups: - "" resources: - pods/exec verbs: - create # 変更を保存 clusterrole.rbac.authorization.k8s.io/argocd-server edited # 変更後 $ kubectl describe clusterrole argocd-server Name: argocd-server Labels: app.kubernetes.io/component=server app.kubernetes.io/name=argocd-server app.kubernetes.io/part-of=argocd Annotations: <none> PolicyRule: Resources Non-Resource URLs Resource Names Verbs --------- ----------------- -------------- ----- pods/exec [] [] [create] *.* [] [] [delete get patch] applications.argoproj.io [] [] [get list watch] pods/log [] [] [get] pods [] [] [get] events [] [] [list]
3. ユーザーの権限変更
ArgoCDにログインするユーザーに権限が足りなければ、argocd-rbac-cm
ConfigMapに以下の権限を追加します。今回は admin
ユーザーを使うため、この操作は不要です。
# 必要なら以下の項目を追加 p, role:myrole, exec, create, */*, allow
※参考: ArgoCD Document - RBAC Configuration
設定変更後の機能確認
設定変更したのでUIを見てみます。argocd-server
Podを再起動する必要があるかと思ったのですが、特に何もせずに Terminal
という項目が追加されていることを確認しました。
正しく設定ができていれば、以下のようにコンソール画面が表示されます。ドキュメントに記載のあるように、kubectl exec
実行時と同じような状態です。
簡単なコマンドを試したところ、問題なく実行されました。
なお、ANSI対応とのことで、こんな風に出力を操作することもできます。
以上の通り、ArgoCD UIからコンテナにログインし、コマンドを実行することができました。サイドカーコンテナが含まれているときはどうなるのかなど、気になる点もありますが、開発環境などで簡単にコンテナの状態をチェックするには役立ちそうです。