GKEでArgoCDのserverをSSL化する方法がわからず、やっとSSL化できたので、やり方を紹介する。
手順
Argocd-serverのdeploymentのcontainer.comandの引数に--insecure
の引数を入れてあげる。
k editとかでyamlファイルを書き換えてください。これはArgoCD側でhttp→https
にリダイレクトするのをOFFにしています。
sslリダイレクトはGKE側で行わないといけないので、この--insecure
が必要です。
k get deploy argocd-server -oyaml -n argocd
Argocd-serverのSVCを立てる。
apiVersion: v1
kind: Service
metadata:
annotations:
cloud.google.com/neg: '{"ingress": true}'
cloud.google.com/backend-config: '{"ports": {"http":"argocd-backend-config"}}' //下記でbackendConfigをapplyする
name: argocd-server
namespace: argocd
spec:
ports:
- name: http
port: 80
protocol: TCP
targetPort: 8080
- name: https
port: 443
protocol: TCP
targetPort: 8080
selector:
app.kubernetes.io/name: argocd-server
type: ClusterIP
GKE特有のBackendConfigとFrontendConfigをapply
frontendConfig→Ingress
backendConfig→serviceに対応してる。
apiVersion: cloud.google.com/v1
kind: BackendConfig
metadata:
name: argocd-backend-config
namespace: argocd
spec:
healthCheck:
checkIntervalSec: 30
timeoutSec: 5
healthyThreshold: 1
unhealthyThreshold: 2
type: HTTP
requestPath: /healthz
port: 8080
---
apiVersion: networking.gke.io/v1beta1
kind: FrontendConfig
metadata:
name: argocd-frontend-config
namespace: argocd
spec:
redirectToHttps:
enabled: true
静的IPを作成し、CloudDNSのレコードにAレコードとして登録する。
これはterraformから行ってもok。静的IPを作成して、作成されたIPアドレスをCloudDNSの作成したホストゾーンに
Aレコードで登録する。
IngressをApplyする
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: argocd-ingress
namespace: argocd
annotations:
kubernetes.io/ingress.global-static-ip-name: argocd-global-ip //作成した静的IPアドレス
networking.gke.io/managed-certificates: argocd-cert //下記で使用するManagedCertificateを紐付ける。
kubernetes.io/ingress.class: "gce"
spec:
defaultBackend:
service:
name: argocd-server
port:
number: 80
---
apiVersion: networking.gke.io/v1
kind: ManagedCertificate //GKEマネージドリソースで自動でSSL証明書を発行してくれる。
metadata:
name: argocd-cert
namespace: argocd
spec:
domains:
- ホストゾーンに登録したサブドメイン
少し時間が経つとhttpsでアクセスできるようになります。
kind:ManagedCertificate
で作成したSSL証明書。