API Developer Portal'i SSL ile Başlatma
Öncelikle, .p12 uzantılı sertifika dosyanızı Kubernetes'e bir secret olarak yükleyiniz.
kubectl create secret generic apinizer-portal-tls --from-file=portal.p12 -n apinizer-portal
XML
JKS'den PKCS12 oluşturma
keytool -genkeypair -alias portal -keyalg RSA -keysize 4096 -storetype PKCS12 -keystore portal.p12 -validity 3650 -storepass password
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. Varsayılan 8080 yerine 8443 kullanılmıştır. |
Örnek bir yaml dosyası:
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: "-Xmx1400m -Xms1400m"
- 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: portal
- 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: 30843
XML