Blog を SSL にした
let's encrypt で certbot で複数ドメインでやるのめんどくさくて https://64p.org/ だけ TLS 対応しているという状況を長らく続けていたのだが、k8s 化するついでに対応。
https://www.javachinna.com/deploy-angular-spring-boot-mysql-digitalocean-kubernetes/
を参考にして対応。
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.10.0/cert-manager.yaml
として cert-manager を入れる(digital ocean の web ui からも入れられるけど)
以下のようにして cert-manager を管理する。これも kubectl apply -f
すれば OK
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
spec:
acme:
# Email address used for ACME registration
email: tokuhirom@gmail.com
server: https://acme-v02.api.letsencrypt.org/directory
privateKeySecretRef:
# Name of a secret used to store the ACME account private key
name: letsencrypt-prod-private-key
# Add a single challenge solver, HTTP01 using nginx
solvers:
- http01:
ingress:
class: nginx
kubectl apply -f https://raw.githubusercontent.com/compumike/hairpin-proxy/v0.2.1/deploy.yml
として hairpin-proxy を入れる。
PROXY protocol support for internal-to-LoadBalancer traffic for Kubernetes Ingress users, specifically for cert-manager self-checks.
という感じのやつ(ref. https://github.com/compumike/hairpin-proxy )。
あとは kubectl apply -f k8s/ingress-nginx.yml
などとして以下のファイルを適用すれば終わり。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: blog3-app-ingress
annotations:
kubernetes.io/ingress.class: nginx
cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
tls:
- hosts:
- blog.64p.org
- 64p.org
secretName: hp-64p-app-tls
rules:
- host: "blog.64p.org"
http:
paths:
- pathType: Prefix
path: /
backend:
service:
name: blog3-app-server
port:
number: 8080
- host: "64p.org"
http:
paths:
- pathType: Prefix
path: /
backend:
service:
name: hp-64p-app-server
port:
number: 8080
Published: 2022-11-07(Mon) 00:38