TECHSTEP

ITインフラ関連の記事を公開してます。

ArgoCD Web-based Terminalを試す

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対応とのことで、こんな風に出力を操作することもできます。

※参考: Qiita - 環境毎にプロンプトの色を変える

以上の通り、ArgoCD UIからコンテナにログインし、コマンドを実行することができました。サイドカーコンテナが含まれているときはどうなるのかなど、気になる点もありますが、開発環境などで簡単にコンテナの状態をチェックするには役立ちそうです。

参考リンク