Red Hat OpenShift on IBM Cloud Container Platform(ROKS)にArgoCDを導入してみた

Red Hat OpenShift on IBM Cloud Container Platform(ROKS)にArgoCDを導入した際、ちょこっとつまづいたので、メモ。

## 環境

+ Red Hat OpenShift on IBM Cloud Container Platform
  + 4.10.32
+ ArgoCD
  + v2.4.13

## 導入手順

専用のネームスペースを作成

```
$ oc new-project argocd
```

以下のサイトを参考に、ArgoCD(Non-HA)をインストール

https://github.com/argoproj/argo-cd/releases

```
$ oc apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/v2.4.13/manifests/install.yaml
```

routerを追加し、URLを確認

```
$ oc create route edge --service argocd-server -n argocd
$ oc get route -n argocd
```

パスワードの確認

```
$ oc get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" -n argocd | base64 -d
```

## 詰まったところ

### 無限リダイレクト

routerのURLにブラウザでアクセスすると、無限リダイレクトが発生しました。

確認のため、Serviceをポートフォワードして・・・

```
$ oc port-forward svc/argocd-server 80:80 -n argocd
```

curlでアクセスしてみると、httpsにリダイレクトされているようです。

```
$ curl -v http://localhost
* About to connect() to localhost port 80 (#0)
*   Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: localhost
> Accept: */*
> 
< HTTP/1.1 307 Temporary Redirect
< Content-Type: text/html; charset=utf-8
< Location: https://localhost/
< Date: Tue, 04 Oct 2022 09:52:32 GMT
< Content-Length: 54
< 
<a href="https://localhost/">Temporary Redirect</a>.

* Connection #0 to host localhost left intact
```

routerからserviceへはhttpでアクセスされるので、httpsへのリダイレクトが発生し、ブラウザがまたhttpsでアクセスするが、routerからserviceへはhttpでアクセスされるので・・・の繰り返しが発生したようです。

httpsはrouterで終端して、あとはhttpで繋ぎたいので、これらのリンク先の記事と情報を参考に、`--insecure`パラメータなどを付与します。

https://qiita.com/hisato_imanishi/items/28849ad0e47c53df3774

https://www.openshift.com/blog/introduction-to-gitops-with-openshift


### argocd-redisが開始しない

get podで確認すると、全て正常に見えるが・・・

```
# oc get pod -n argocd
NAME                                                READY   STATUS    RESTARTS   AGE
argocd-application-controller-0                     1/1     Running   0          21m
argocd-applicationset-controller-7f58c45d4c-4nvj6   1/1     Running   0          21m
argocd-dex-server-5bc5cbfcf8-89k78                  1/1     Running   0          21m
argocd-notifications-controller-6fbd6895d6-s8lbf    1/1     Running   0          21m
argocd-repo-server-565f474fd8-h5vt6                 1/1     Running   0          21m
argocd-server-b488b98c7-47gr2                       1/1     Running   0          47s
```

実はargocd-redisが開始されていませんでした。

```
# oc get deployment -n argocd
NAME                               READY   UP-TO-DATE   AVAILABLE   AGE
argocd-applicationset-controller   1/1     1            1           27m
argocd-dex-server                  1/1     1            1           27m
argocd-notifications-controller    1/1     1            1           27m
argocd-redis                       0/1     1            0           27m
argocd-repo-server                 1/1     1            1           27m
argocd-server                      1/1     1            1           27m
```

describeで確認すると、このようなエラーが出ていました。

```
    message: 'pods "argocd-redis-65596bf87-" is forbidden: unable to validate against
      any security context constraint: [provider "anyuid": Forbidden: not usable by
      user or serviceaccount, spec.containers[0].securityContext.runAsUser: Invalid
      value: 999: must be in the ranges: [1000710000, 1000719999], provider "ibm-restricted-scc":
      Forbidden: not usable by user or serviceaccount, provider "nonroot": Forbidden:
      not usable by user or serviceaccount, provider "ibm-anyuid-scc": Forbidden:
      not usable by user or serviceaccount, provider "hostmount-anyuid": Forbidden:
      not usable by user or serviceaccount, provider "ibm-anyuid-hostpath-scc": Forbidden:
      not usable by user or serviceaccount, provider "hostnetwork": Forbidden: not
      usable by user or serviceaccount, provider "hostaccess": Forbidden: not usable
      by user or serviceaccount, provider "ibm-anyuid-hostaccess-scc": Forbidden:
      not usable by user or serviceaccount, provider "node-exporter": Forbidden: not
      usable by user or serviceaccount, provider "ibm-privileged-scc": Forbidden:
      not usable by user or serviceaccount, provider "privileged": Forbidden: not
      usable by user or serviceaccount]'
```

deploymentの定義をみると、`runAsUser: 999` と定義されているので、この行をoc editで削除することで、正常に起動しました。


これで利用可能になりました。