Tanzu Kubernetes Grid(TKGm) v1.3.1 にArgo CD をインストールする

自分備忘録用メモ。TKGm v1.3.1 のWorkload Cluster にArgo CDをインストールした際の手順。


前提条件

  • TKG v1.3.1
  • Workload Cluster が構築済であり、Ingress コントローラーとしてContour をデプロイ済

手順

Argo CD のデプロイ

こちら「Tanzu Kubernetes Grid(TKGm) v1.3.1 にContour, Harbor, TBS をデプロイした際の手順」であるContour までのデプロイが終わっている事が前提で始めています。

Argo CD のドキュメントにある手順に従って、デプロイしていきます。
k create namespace argocd
k -n argocd apply -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
$ k -n argocd get all
NAME                                      READY   STATUS    RESTARTS   AGE
pod/argocd-application-controller-0       1/1     Running   0          94s
pod/argocd-dex-server-9dc558f5-rnw6l      1/1     Running   0          94s
pod/argocd-redis-759b6bc7f4-n8jsd         1/1     Running   0          94s
pod/argocd-repo-server-5fbf484547-sq8gx   1/1     Running   0          94s
pod/argocd-server-6d4678f7f6-5ww8q        1/1     Running   0          94s

NAME                            TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
service/argocd-dex-server       ClusterIP   100.66.10.218    <none>        5556/TCP,5557/TCP,5558/TCP   94s
service/argocd-metrics          ClusterIP   100.65.70.52     <none>        8082/TCP                     94s
service/argocd-redis            ClusterIP   100.70.186.118   <none>        6379/TCP                     94s
service/argocd-repo-server      ClusterIP   100.69.121.145   <none>        8081/TCP,8084/TCP            94s
service/argocd-server           ClusterIP   100.68.53.240    <none>        80/TCP,443/TCP               94s
service/argocd-server-metrics   ClusterIP   100.67.216.28    <none>        8083/TCP                     94s

NAME                                 READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/argocd-dex-server    1/1     1            1           94s
deployment.apps/argocd-redis         1/1     1            1           94s
deployment.apps/argocd-repo-server   1/1     1            1           94s
deployment.apps/argocd-server        1/1     1            1           94s

NAME                                            DESIRED   CURRENT   READY   AGE
replicaset.apps/argocd-dex-server-9dc558f5      1         1         1       94s
replicaset.apps/argocd-redis-759b6bc7f4         1         1         1       94s
replicaset.apps/argocd-repo-server-5fbf484547   1         1         1       94s
replicaset.apps/argocd-server-6d4678f7f6        1         1         1       94s

NAME                                             READY   AGE
statefulset.apps/argocd-application-controller   1/1     94s

Ingress 設定

Ingress を使えるように設定していきます。ドキュメントに沿って、設定変更していきます。
k -n argocd edit deployments.apps argocd-server

以下の様にargocd-server のspec.template.spec.containers.command 部分を修正します。
spec:
  template:
    spec:
      containers:
      - name: argocd-server
        command:
        - /argocd-server
        - --staticassets
        - /shared/app
        - --repo-server
        - argocd-repo-server:8081
        - --insecure

続いて、Ingress で利用するTLS Secret を作成します。
$ k -n argocd create secret tls argocd-tls-secret \
--cert=./lab-cert/<cluster-name>/cfg/live/<cluster-name>.<MYDOMAIN>/fullchain.pem \
--key=./lab-cert/<cluster-name>/cfg/live/<cluster-name>.<MYDOMAIN>/privkey.pem

Ingress 用のマニフェストを作成し、デプロイします。
$ cat argocd-server-ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: argocd-server-ingress
  namespace: argocd
  annotations:
    kubernetes.io/ingress.class: contour
    ingress.kubernetes.io/force-ssl-redirect: "true"
spec:
  rules:
  - host: argocd.<cluster-name>.<MYDOMAIN>
    http:
      paths:
      - path: /
        backend:
          serviceName: argocd-server
          servicePort: http
  tls:
  - hosts:
    - argocd.<cluster-name>.<MYDOMAIN>
    secretName: argocd-tls-secret
k -n argocd apply -f argocd-server-ingress.yaml

Argo CD にログインするためのクレデンシャルを取得します。
k -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d

ログインしてみます。GUI ではログイン出来るのですが、argocd CLI 経由だと上手く行きません。。。
$ argocd login argocd.<cluster-name>.<MYDOMAIN>
Username: admin
Password:
FATA[0009] rpc error: code = Internal desc = transport: received the unexpected content-type "text/plain; charset=utf-8"

TLS Passthrough 設定が必要な様なので作成していきます。

TLS Passthrough 設定

マニフェストを作成し、デプロイします。
$ cat argocd-server-tls-passthrough.yaml
apiVersion: projectcontour.io/v1
kind: HTTPProxy
metadata:
  name: argocd-server-tlg-passthrough
  namespace: argocd
spec:
  virtualhost:
    fqdn: argocd.<cluster-name>.<MYDOMAIN>
    tls:
      passthrough: true
  tcpproxy:
    services:
    - name: argocd-server
      port: 80
k -n argocd apply -f argocd-server-tls-passthrough.yaml

改めて、argocd CLI でログインしてみます。
$ argocd login argocd.<cluster-name>.<MYDOMAIN>
Username: admin
Password:
'admin:login' logged in successfully

無事ログイン出来ました。これで、Argo CD を利用し、Kubernetes 環境にコンテナをデプロイ出来るようになりました。

このブログの人気の投稿

Tanzu Mission Control(TMC) の NetworkPolicy を試してみる