やりたいこと
前回の記事の続き
https://qiita.com/Rocky-6/items/33a41128423033d4ab1b
おうちKubernetesクラスター内のアプリケーションをcert-managerでhttps化したい。
ポリシーの設定
前回の記事でIngressリソースを作成すると、Route53に自動でレコードが登録されるようになりました。
今回はcert-managerがレコードを追加できるようにポリシーを設定します。
https://cert-manager.io/docs/configuration/acme/dns01/route53/
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "route53:GetChange",
"Resource": "arn:aws:route53:::change/*"
},
{
"Effect": "Allow",
"Action": [
"route53:ChangeResourceRecordSets",
"route53:ListResourceRecordSets"
],
"Resource": "arn:aws:route53:::hostedzone/*"
},
{
"Effect": "Allow",
"Action": "route53:ListHostedZonesByName",
"Resource": "*"
}
]
}
前回の記事で作ったユーザーにポリシーをアタッチします。(省略)
cert-managerのデプロイ
チュートリアル通りインストールします。
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.3/cert-manager.yaml
Cluster Issuerの作成
このマニフェストでcert-managerは指定されたドメインに対してLet's Encryptから証明書を自動的に発行および更新できるようになります。
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-staging
# name: letsencrypt-prod - 本番
spec:
acme:
email: example@email.com
server: https://acme-staging-v02.api.letsencrypt.org/directory
# server: https://acme-v02.api.letsencrypt.org/directory - 本番
privateKeySecretRef:
name: letsencrypt-staging
# name: letsencrypt-prod - 本番
solvers:
- selector:
dnsZones:
- example.com - 適宜変更
dns01:
route53:
region: ap-northeast-1
accessKeyIDSecretRef:
name: aws-credentials
key: aws-access-key-id
secretAccessKeySecretRef:
name: aws-credentials
key: aws-secret-access-key
Ingressの作成
前回作ったIngressにcert-managerの設定について追加します。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: apple
namespace: sandbox
labels:
name: apple
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod - 追加
spec:
ingressClassName: nginx
tls: --------------------------|
- hosts: |
- "*.example.com" | 追加
- apple.example.com |
secretName: apple ---------|
rules:
- host: apple.example.com
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: apple
port:
number: 5678
詰まったところ
今度書く