Kubernetes ingress ile erişime açtığımız uygulamalara güvenli erişim ihtiyacımız zaman zaman ortaya çıkıyor. Bu durum için farklı bir katman ekleyerek SSL offloading işlemini Apache, Nginx veya HAProxy gibi ürünlerle gerçekleştirebiliriz; ancak bu işin daha kolay bir yolu var: Ingress modülleri SSL sertifikasını eklemeyi destekliyor. Bu işlem için sertifikalarımızı master sunucuya kopyalıyoruz. Aşağıdaki komutu çalıştırırken sertifikaların belirtilen dizinde bulunduğuna emin olun.
Not: Kullandığım geçerli sertifikanın kök sertifika bilgileri bazı ortamlarda bulunmadığı için doğruluk konusunda sorun yaşıyorum. Bu durumdan kurtulmak için bundle kullanıyorum.
Sertifika Oluşturma
İlk adım olarak, SSL sertifikamızı oluşturmak için aşağıdaki komutu kullanıyoruz. cpynet.com
alan adımızı kullanarak sertifikayı oluşturuyoruz:
kubectl create secret tls cpynet.com --key node.cpynet.com.key --cert node.cpynet.com.ca-bundle
Ingress Tanımı
Daha sonra ingress kaydımızda TLS yapılandırmasını ekliyoruz. Aşağıdaki gibi bir tanım oluşturmalıyız:
tls:
- hosts:
- node.cpynet.com
secretName: cpynet.com
Örnek Ingress Kaydı
Örnek bir ingress kaydı aşağıdaki gibi olacaktır:
yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: node
namespace: default
spec:
ingressClassName: kong
tls:
- hosts:
- node.cpynet.com
secretName: cpynet.com
rules:
- host: node.cpynet.com
http:
paths:
- path: /api-testpipeline
pathType: Prefix
backend:
service:
name: node
port:
number: 80
Full Manifest Dosyası
Uygulamamız için gereken tam manifest dosyası aşağıdaki gibidir:
apiVersion: apps/v1
kind: Deployment
metadata:
name: node
namespace: default
labels:
app: node
spec:
replicas: 2
revisionHistoryLimit: 3
selector:
matchLabels:
app: node
template:
metadata:
labels:
app: node
spec:
containers:
- name: node
image: nexus.cpynet.com:8083/node:3.3
imagePullPolicy: Always
resources:
limits:
memory: 6144Mi
requests:
memory: 2048Mi
ports:
- containerPort: 80
imagePullSecrets:
- name: paytrnexus
---
apiVersion: v1
kind: Service
metadata:
name: node
namespace: default
labels:
app: node
spec:
ports:
- port: 80
targetPort: 80
protocol: TCP
name: http
- port: 443
targetPort: 443
protocol: TCP
name: https
selector:
app: node
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: node
namespace: default
spec:
ingressClassName: kong
tls:
- hosts:
- node.cpynet.com
secretName: cpynet.com
rules:
- host: node.cpynet.com
http:
paths:
- path: /api-testpipeline
pathType: Prefix
backend:
service:
name: node
port:
number: 80
Kontrol Etme
Tüm işlemleri Kubernetes ortamına deploy ettikten sonra, erişiminizi kontrol edebilirsiniz. Bu şekilde, uygulamanıza güvenli bir şekilde SSL üzerinden erişim sağlayabilirsiniz.