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şkenAçıklama
SSL_KEY_STORESSL sertifikasını içeren anahtar deposunun yolu. Örneğimizde, Spring Boot'un bunu classpath'te aramasını istiyoruz.
SSL_KEY_STORE_PASSWORDAnahtar deposuna erişmek için kullanılan şifre.
SSL_KEY_STORE_TYPEAnahtar deposunun türü (Kullanım: PKCS12).
SSL_KEY_ALIASAnahtar deposundaki anahtarı tanımlayan takma ad.
SSL_ENABLEDSpring Boot uygulamasının HTTPS protokolünü kullanmasını sağlar.
SERVER_PORTSunucunun 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