API Developer Portal'i SSL ile Başlatma
Uzantısı .p12 olan sertifika dosyası Kubernetes Control Plane sunucularından birine aktarılır ve /etc/ssl/certs dizinine taşınır/kopyalanır.
İlgili adresteyken aşağıdaki komut ile sertifika dosyası secfret olarak Kubernetes'e yüklenir.
kubectl create secret generic apinizer-portal-tls --from-file=portal.p12 -n apinizer-portal
XML
Eğer elinizde sadece .jks uzantılı dosya bulunmaktaysa, bu dosyadan .p12 uzantılı dosya aşağıdaki gibi oluşturulabilir. Sonrasında önceki adım uygulanır.
Sertifikanın alias tanımını almak için aşağıdaki kod çalıştırılır.
keytool -list -v -keystore portal.p12 -storetype PKCS12
XML
Alias tanımı bilinen .jks uzantılı dosyadan .p12 uzantılı dosya oluşturulur.
keytool -genkeypair -alias <ALIAS> -keyalg RSA -keysize 4096 -storetype PKCS12 -keystore portal.p12 -validity 3650 -storepass <PASSWORD>
XML
Tanımlanması gereken değişkenler:
Değişken | Açıklama |
---|---|
SSL_KEY_STORE | SSL sertifikasını içeren anahtar deposunun yolu. Örneğimizde, Spring Boot'un bunu classpath'te aramasını istiyoruz. |
SSL_KEY_STORE_PASSWORD | Anahtar deposuna erişmek için kullanılan şifre. |
SSL_KEY_STORE_TYPE | Anahtar deposunun türü (Kullanım: PKCS12). |
SSL_KEY_ALIAS | Anahtar deposundaki anahtarı tanımlayan takma ad. |
SSL_ENABLED | Spring Boot uygulamasının HTTPS protokolünü kullanmasını sağlar. |
SERVER_PORT | Sunucunun dinlediği port. 8443 kullanılmalıdır. |
Sertifika bilgilerinin kullanıldığı örnek bir deployment yaml dosyası aşağıdaki gibi olacaktır.
apiVersion: apps/v1
kind: Deployment
metadata:
name: apinizer-portal
namespace: apinizer-portal
spec:
replicas: 1
selector:
matchLabels:
app: apinizer-portal
version: v1
template:
metadata:
labels:
app: apinizer-portal
version: v1
spec:
volumes:
- name: apinizer-portal-tls
secret:
secretName: apinizer-portal-tls
containers:
- name: apinizer-portal
image: apinizercloud/portal:<APINIZER_VERSION>
imagePullPolicy: IfNotPresent
resources:
limits:
cpu: 1
memory: 2Gi
lifecycle:
preStop:
exec:
command:
- /bin/sh
- -c
- sleep 10
ports:
- containerPort: 8443
protocol: TCP
env:
- name: SPRING_PROFILES_ACTIVE
value: prod
- name: JAVA_OPTS
value: "-XX:MaxRAMPercentage=75.0"
- name: SSL_KEY_STORE
value: /etc/ssl/certs/portal.p12
- name: SSL_KEY_STORE_PASSWORD
value: <PASSWORD>
- name: SSL_KEY_STORE_TYPE
value: PKCS12
- name: SSL_KEY_ALIAS
value: <ALIAS>
- name: SSL_ENABLED
value: "true"
- name: SERVER_PORT
value: "8443"
- name: API_PORTAL_MANAGEMENT_API_BASE_URL
valueFrom:
secretKeyRef:
key: apinizerManagementApiBaseUrl
name: apinizer-portal-secret
- name: API_PORTAL_MANAGEMENT_API_KEY
valueFrom:
secretKeyRef:
key: apiKey
name: apinizer-portal-secret
volumeMounts:
- name: apinizer-portal-tls
mountPath: /etc/ssl/certs
dnsPolicy: ClusterFirst
restartPolicy: Always
---
apiVersion: v1
kind: Service
metadata:
name: apinizer-portal-https-service
namespace: apinizer-portal
labels:
app: apinizer-portal
spec:
selector:
app: apinizer-portal
type: NodePort
ports:
- name: http
port: 8443
nodePort: 31843
YML