DigitalOcean に k8s を構築して、色々なアプリケーションをデプロイしてみる。
DigitalOcean の MarketPlace に存在しているため、そちらを利用した。
cert-manager と nginx-ingress-controller を導入すると、TLS 有効な Ingress を構築できる。
- ClusterIssuer を作成
ClusterIssuer とは、証明書発行のリクエストを行うためのリソース。 cert-manager は、Issuer と ClusterIssuer の 2 つのリソースをサポートしている。 前者は一つの名前空間でのみ利用でき、後者はクラスタ全体で利用できる。
詳細は以下を参考にする。 https://cert-manager.io/docs/concepts/issuer/
letsencrypt を利用して証明書を発行するための ClusterIssuer を作成した。 ClusterIssuer はクラスタに一つ作成すればいいため、ここではデフォルトの名前空間に作成した。
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
# namespace: argocd
spec:
acme:
# The ACME server URL
server: https://acme-v02.api.letsencrypt.org/directory
# Email address used for ACME registration
email: <your-email>
# Name of a secret used to store the ACME account private key
privateKeySecretRef:
name: letsencrypt-prod
# Enable the HTTP-01 challenge provider
solvers:
- http01:
ingress:
ingressClassName: nginx
- Certificate リソースを作成
Certificate リソースは、証明書リクエスト自体を表現するリソース。 詳細は以下を参考にする。 https://cert-manager.io/docs/usage/certificate/
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: argocd-server-tls
namespace: argocd
spec:
secretName: argocd-server-tls
issuerRef:
name: letsencrypt-prod
kind: ClusterIssuer
dnsNames:
- argocd.calloc.tech
- Ingress リソースを作成
以下のように Ingress リソースを作成する。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: argocd-server-ingress
namespace: argocd
annotations:
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
nginx.ingress.kubernetes.io/backend-protocol: "HTTP"
cert-manager.io/clusterissuer: "letsencrypt-prod"
spec:
ingressClassName: nginx
tls:
- hosts:
- "argocd.calloc.tech"
secretName: argocd-server-tls
rules:
- host: argocd.calloc.tech
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: argocd-server
port:
number: 80
このようにして、TLS 有効な Ingress を構築できる。
DigitalOcean の MarketPlace に存在する ArgoCD はバージョンが古いため、最新の ArgoCD をインストールする。
Helm でインストールした。
参考 URL: https://github.com/argoproj/argo-helm/tree/main/charts/argo-cd
helm repo add argo https://argoproj.github.io/argo-helm
helm install argocd argo/argo-cd -n argocd -f argocd-values.yaml
ここで値を指定したのは、ArgoCD の UI に HTTP でアクセスできるようにするため。 後ほど Ingress を構築するときに、SSL/TLS を Ingress で終端させるため。
ArgoCD のパスワードを取得する。
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
とりあえずポートフォワードして、ブラウザでアクセスしてみる。
kubectl port-forward svc/argocd-server -n argocd 8080:80
http://localhost:8080 にアクセスできることを確認。
あとは上記の通りの ingress を設定して、SSL/TLS 有効な Ingress を構築する。
Zitadel は、セルフホストできる IDaaS (Identity as a Service) サービスである。
参考 URL: https://github.com/zitadel/zitadel-charts/blob/main/examples/1-postgres-insecure/README.md
値を指定して、Helm でインストールする。
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo add zitadel https://charts.zitadel.com
helm install --wait db bitnami/postgresql --version 12.10.0 --values https://raw.githubusercontent.com/zitadel/zitadel-charts/main/examples/1-postgres-insecure/postgres-values.yaml -n zitadel
helm install my-zitadel zitadel/zitadel --values https://raw.githubusercontent.com/zitadel/zitadel-charts/main/examples/1-postgres-insecure/zitadel-values.yaml -f zitadel.yaml -n zitadel