Bu yazımda bir proje için kullandığım Aws Eks’de SSL Termination işleminden bahsedeceğim. Hadi hızlı bir şekilde nasıl yapıyoruz ona bakalım!
İlk olarak AWS Management Console ekranına giriyoruz, daha sonra Certificate Manager > Request a certificate > Request a public certificate seçip Request a certificate butonuna tıklayarak devam ediyoruz. Aşağıdaki gibi ekran bizi karşılayacak, daha sonra domain adresimizi girerek Next diyoruz.
Bir sonraki adımda aşağıdaki gibi doğrulama metodunu seçmemiz gerekiyor. AWS bizim için aşağıda göründüğü gibi 2 tane seçenek sunuyor.
DNS validation ve Email validation.
Email validation yönteminden biraz bahsedeyim. Bu yöntemi seçtiğinizde AWS tarafından aşağıdaki email adreslerine doğrulama linkleri gönderiliyor. Bu yöntemi kullanacaksanız aşağıdaki email adreslerinin açık olup olmadığını kontrol etmenizde fayda var.
- administrator@
your_domain_name
- hostmaster@
your_domain_name
- postmaster@
your_domain_name
- webmaster@
your_domain_name
- admin@
your_domain_name
Ben DNS validation metonu seçeceğim, seçimi işaretleyip Next diyoruz.
Next dedikten sonra aşağıdaki gibi Tag kısmına geliyoruz (Burayı direkt geçebilirsiniz, zorunlu bir alan değil) ben Name tag’ini verip ilerliyorum.
Aşağıdaki ekranda yaptığımız adımların ufak bir özetini görüyoruz:
Confirm and request diyerek son adıma geliyoruz. Aşağıda göründüğü gibi domain adresimize tanımlamamız gereken bir CNAME tanımı var. Bunu domain sağlayıcımıza gidip tanımlayalım:
CNAME tanımını aşağıdaki gibi yaptım:
Ve Aws tarafında Continue diyerek ilerliyoruz. Her şeyi düzgün yaptığınızda aşağıdaki gibi görünecek:
Şimdi Kubernetes’e basit bir deployment yapalım; bunun için basit bir deployment ve service hazırladım. İlk olarak deploy edeceğimiz docker image’nı hazırlayalım. Template için basit bir html template buldum, bunu nginx alpine üzerinde ayağa kaldıracağız.
NOT : Tüm dosyaları yazının sonunda toplu olarak paylaşacağım.
Dockerfile
FROM nginx:alpine
COPY . /usr/share/nginx/html
RUN rm /etc/nginx/conf.d/default.conf
COPY nginx.conf /etc/nginx/conf.d
EXPOSE 80
Nginx Conf
server {
listen 80;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
Deployment Yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: ssltermination
namespace: work
spec:
replicas: 1
selector:
matchLabels:
app: ssltermination
template:
metadata:
labels:
app: ssltermination
spec:
containers:
- name: ssltermination
image: oguzzarci/awseksssltermination:0.1
ports:
- containerPort: 80
resources:
limits:
cpu: 50m
memory: 64Mi
requests:
cpu: 50m
memory: 64Mi
---
apiVersion: v1
kind: Service
metadata:
name: ssltermination
namespace: work
annotations:
service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http
service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "443"
service.beta.kubernetes.io/aws-load-balancer-ssl-cert: CERT_ARN
spec:
type: LoadBalancer
selector:
app: ssltermination
ports:
- protocol: TCP
port: 443
targetPort: 80
CERT_ARN : Oluşturduğumuz sertifikanın ARN (Amazon Resource Names) değerini alıp deployment yaml dosyamızda CERT_ARN kısmına ekleyeceğiz:
Evet artık sona doğru çok yaklaştık 🙂
Docker build alıp deployment yapalım:
Docker image’nı pushladım. Daha sonra deployment yaml ile deployment’ı yaptım.
Aws bizim için bir classic loadbalancer oluşturacak, hadi gidip görelim:
Yukarıda gördüğümüz gibi oluşturduğumuz sertifikayı loadbalancer’a ekledi. Şimdi bir CNAME ekleyip loadbalancer’a yönlendirelim:
Artık her şey hazır.
https://oguz.teknodice.com adresine gittiğimizde bağlantımızın güvenli olduğunu görmemiz gerekiyor.
Evet ilk girdiğimizde bizi biricik oğlum karşılıyor 🙂
Gördüğümüz gibi adresimizde SSL var. Son olarak sertifikamıza bakalım:
Bir sonraki yazıda görüşmek üzere 🙂
Yazılan dosyalara GITHUB repomdan ulaşabilirsiniz.