سلام
در این مطلب میخام روش نصب و راه اندازی ssl lets encrypt را در کوبرنتیس و رنچر توضیح بدم چون خودم خیلی سرچ کردم در موردش !
یکی از سرویس های ضروری مورد استفاده در کوبر و رنچر سرویس cert manager هست که وظیفه ساخت و تمدید خودکار ssl را دارد و بصورت رایگان میتونید از سرویس https استفاده کنید برای سرویس هاتون.
برای نصب این سرویس روش های مختلفی پیشنهاد شده که من خیلی هاشون رو تست کردم که این روش به نظرم راحت تر و بدون ایراد بود
برای نصب پاد های مورد نیاز با توجه به نسخه کوبرنتیس از دستور زیر استفاده کنید:
# Kubernetes 1.15+
$ kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v0.15.1/cert-manager.crds.yaml
# Kubernetes <1.15
$ kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v0.15.1/cert-manager-legacy.crds.yaml
با دستور بالا همه پاد های مورد نیاز خودکار براتون نصب میشه بعد از این مرحله میتونید صحت نصب رو با روش زیر تست کنید
اول باید یه issuer بسازید تا یه cert تست بگیره براتون :
$ cat <<EOF > test-resources.yaml
apiVersion: v1
kind: Namespace
metadata:
name: cert-manager-test
---
apiVersion: cert-manager.io/v1alpha2
kind: Issuer
metadata:
name: test-selfsigned
namespace: cert-manager-test
spec:
selfSigned: {}
---
apiVersion: cert-manager.io/v1alpha2
kind: Certificate
metadata:
name: selfsigned-cert
namespace: cert-manager-test
spec:
dnsNames:
- example.com
secretName: selfsigned-cert-tls
issuerRef:
name: test-selfsigned
EOF
$ kubectl apply -f test-resources.yaml
حالا با استفاده از دستور زیر ببینید که نصبتون شالم بوده یا نه:
$ kubectl describe certificate -n cert-manager-test
اگر همه چی خوب انجام شده باشه باید خروجی زیر را ببینید:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal CertIssued 4s cert-manager Certificate issued successfully
در مرحله بعد باید issuer اصلی رو با توجه به زیر ساخت مورد استفاده برای لود بالانسرتون بسازید در اینجا من برای Ingress مینویسم.
ابتدا فایل کافیگ رو بسازید ایمیل رو وارد کنید و اجراش کنید:
apiVersion: cert-manager.io/v1alpha2
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
spec:
acme:
# You must replace this email address with your own.
# Let's Encrypt will use this to contact you about expiring
# certificates, and issues related to your account.
email: user@example.com
server: https://acme-staging-v02.api.letsencrypt.org/directory
privateKeySecretRef:
# Secret resource that will be used to store the account's private key.
name: example-issuer-account-key
# Add a single challenge solver, HTTP01 using nginx
solvers:
- http01:
ingress:
class: nginx
$ kubectl apply -f issuer.yaml
از این به بعد هر رکوردی که با annotation زیر به عنوان ingress تعریف بشه issuer براش cert رو میسازه
cert-manager.io/cluster-issuer: letsencrypt-prod
بطور مثال :
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
# add an annotation indicating the issuer to use.
cert-manager.io/cluster-issuer:letsencrypt-prod
name: myIngress
namespace: myIngress
spec:
rules:
- host: myingress.com
http:
paths:
- backend:
serviceName: myservice
servicePort: 80
path: /
tls: # < placing a host in the TLS config will indicate a certificate should be created
- hosts:
- myingress.com
secretName: myingress-cert # < cert-manager will store the created certificate in this secret.
برای انجام این مراحل در رنچر مثل همین روش انجام میشه فقط وقتی ingress رو ساختید باید در annotation های ingress اسم issuer مشخص بشه:
cert-manager.io/cluster-issuer:letsencrypt-prod
و نام دامنه هم در قسمت ssl وارد بشه
بعد از ساخت Ingress باید edit yaml رو روی اون Ingress بزنید و نام cert جدید رو مشخص کنید به شکل زیر:
tls: # < placing a host in the TLS config will indicate a certificate should be created
- hosts:
- myingress.com
secretName:myingress-cert
قسمت secretName رو باید خدتون اضافه کنید و ذخیره کنید.
بعد از ذخیره issuer بصورت خودکار cert رو میسازه و میتونید استفاده کنید...