動かざることバグの如し

近づきたいよ 君の理想に

ArgoCDへのアクセスをIstio経由で出来るようにする

環境

ArgoCDをistio経由でアクセスできるようにしたい

LoadBalancerも悪くないけどIP1つ消費してしまうしせっかくならistioに統合させたかったのでメモ

手順

オレオレ証明書の準備

ArgoCDはhttps通信必須なのでSSL証明書が必要 今回はオレオレ証明書で代用する

10年分のお買い得オレオレ証明書発行

openssl req -nodes -newkey rsa:2048 -keyout server.key -out server.csr -subj "/C=JP/ST=Hokkaido/L=Sapporo/O=Example INC./OU=IT Department/CN=*.turai.work"
openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt

istioに渡す

kubectl create -n istio-system secret generic oreore-turaiwork-credential \
  --from-file=key=server.key \
  --from-file=cert=server.crt

Deployment argocd-serverの修正

次に argocd-serverの起動パラメータに --insecure を追加する必要がある

$ kubectl -n argocd patch deployment argocd-server -p '
{
  "spec": {
    "template": {
      "spec": {
        "containers": [
          {
            "name": "argocd-server",
            "command": ["argocd-server","--insecure"]
          }
        ]
      }
    }
  }
}'

Service argocd-serverの修正

kubectl -n argocd edit svc argocd-server

spec内の443の通信の名前を「https」から「grpc」に変更する

spec:
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 8080
  - name: grpc
    port: 443
    protocol: TCP
    targetPort: 8080

GatewayVirtualServerの作成

https://argocd.turai.work でアクセスできるようにさせる例 credentialNameは作成したSecretの名前(今回だとoreore-turaiwork-credential)を変えておく

apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
  name: argocd-gw
  namespace: argocd
spec:
  selector:
    istio: ingressgateway
  servers:
    - hosts:
        - argocd.turai.work
      port:
        name: http
        number: 80
        protocol: HTTP
      tls:
        httpsRedirect: true
    - hosts:
        - argocd.turai.work
      port:
        name: https
        number: 443
        protocol: HTTPS
      tls:
        mode: SIMPLE
        credentialName: oreore-turaiwork-credential
---
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: argocd-vsvc
  namespace: argocd
spec:
  gateways:
    - argocd-gw
  hosts:
    - argocd.turai.work
  http:
    - name: grpc
      match:
        - headers:
            user-agent:
              prefix: argocd-client
      route:
        - destination:
            host: argocd-server
            port:
              number: 443
    - name: http
      route:
        - destination:
            host: argocd-server
            port:
              number: 80

昨今のChromeだとオレオレ証明書が厳しくなってMac側の設定しないとアクセスできない(Safariは可

Mac Chromeでプライバシーブロックされ「詳細設定」からもページが表示できない - Qiita

まとめ

再構築するとき一発でできたほうがいいなと思ったのでkustomization.ymlに変更した 変更の中身は上記と同じ

kubernetes-manifests/kustomization.yml at master · thr3a/kubernetes-manifests

参考リンク