[17.0.0.3 und höher]

Liberty mit Ingress unter Verwendung von SSL in IBM Cloud Private implementieren

Wenn Sie Ingress anfordern, ist der Browser bis zum Proxy geschützt. Wenn Sie jedoch die Back-End-Verbindung schützen möchten, führen Sie diese Task aus.

Informationen zu diesem Vorgang

Die Konfigurationsübersicht enthält die server.xml-Dateiüberschreibungen. Mit diesen Überschreibungen wird das Feature aktiviert, das für SSL erforderlich ist, der Liberty-Server oder der Liberty-Service für die Verwendung der Zertifikate konfiguriert, die aus dem Fabric generiert werden.

Vorgehensweise

  1. Erstellen Sie die Datei libertyssl.xml mit dem folgenden Inhalt:
    <?xml version="1.0" encoding="UTF -8"?>
    <server>
    <featureManager>
    <feature>ssl-1.0</feature>
    </featureManager>
    <keyStore id="defaultKeyStore" location="/etc/wlp/config/keystore/key.jks" 
    password="${env.MB_KEYSTORE_PASSWORD}" />
    <keyStore id="defaultTrustStore" location="/etc/wlp/config/truststore/trust.jks" 
    password="${env.MB_TRUSTSTORE_PASSWORD}" />
    </server>
  2. Erstellen Sie die Konfigurationsübersicht aus der Datei, die Sie im vorherigen Schritt erstellt haben:
    kubectl create configmap liberty -ssl --from-file=libertyssl.xml
  3. Stellen Sie sicher, dass der geheime Kubernetes-Schlüssel vorhanden ist. Führen Sie den folgenden kubectl-Befehl aus und suchen Sie in der folgenden Liste nach den geheimen Kubernetes-Schlüsseln: mb - truststore, mb - truststore, mb - keystore und mb - keystore - password:
    kubectl get secrets
  4. Führen Sie den folgenden kubectl-Befehl aus und suchen Sie in der Liste nach dem Wert liberty - ssl der Konfigurationsübersicht:
    kubectl get configmap
  5. Erstellen Sie in Ihrer Liberty-Servicedatei deployment.yaml den folgenden Service:
    apiVersion: v1
    kind: Service
    metadata:
      name: liberty
      labels:
       name: liberty
    spec:
     selector:
      name: liberty
     ports:
    - name: http
    protocol: TCP
    port: 9080
    targetPort: 9080
    - name: https
    protocol: TCP
    port: 9443
    targetPort: 9443
    type: NodePort
  6. Erstellen Sie in Ihrer Liberty-Servicedatei deployment.yaml die folgende Ingress-YAML-Datei:
    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: liberty
      labels:
        name: liberty
      annotations:
        kubernetes.io/ingress.class: "nginx"
        ingress.kubernetes.io/affinity: "cookie"
        ingress.kubernetes.io/session-cookie-name: "route"
        ingress.kubernetes.io/session-cookie-hash: "sha1"
        ingress.kubernetes.io/rewrite-target: /
        ingress.kubernetes.io/secure-backends: "true"
    spec:
      rules:
      - host:
        http:
          paths:
          - path: / liberty
            backend:
              serviceName: liberty
              servicePort: 9443
  7. Erstellen Sie in Ihrer Liberty-Server- oder Liberty-Servicedatei deployment.yaml die Datenträger, an die die geheimen Schlüssel und die Konfigurationsübersicht angehängt werden. Verwenden Sie das folgende Code-Snippet, ohne es zu ändern:
    volumes:
    - name: keystores
      secret:
        secretName: mb-keystore
    - name: truststores
      secret:
        secretName: mb-truststore
    - name: liberty-ssl
      configMap:
        name: liberty-ssl
        items:
          - key: libertyssl.xml
            path: defaults/libertyssl.xml
  8. Hängen Sie in Ihrer Liberty-Server- oder Liberty-Servicedatei deployment.yaml die erstellten Datenträger an. Verwenden Sie das folgende Code-Snippet, ohne es zu ändern:
    volumeMounts:
    - name: keystores
      mountPath: /etc/wlp/config/keystore
      readOnly: true
    - name: truststores
      mountPath: /etc/wlp/config/truststore
      readOnly: true
    - name: liberty-ssl
      mountPath: /config/configDropins
  9. Geben Sie in Ihrer Liberty-Server- oder Liberty-Servicedatei deployment.yaml die Umgebungsvariablen an, die die geheimen Kubernetes-Schlüssel referenzieren. Verwenden Sie das folgende Code-Snippet, ohne es zu ändern:
    env:
    - name: MB_KEYSTORE_PASSWORD
      valueFrom:
        secretKeyRef:
          name: mb-keystore-password
          key: password
    - name: MB_TRUSTSTORE_PASSWORD
      valueFrom:
        secretKeyRef:
          name: mb-truststore-password
          key: password

Beispiel

Das folgende Beispiel ist eine Liberty-Beispielimplementierungsdatei. Das Beispielimage verwendet die geheimen Kubernetes-Schlüssel mb-truststore, mb-truststore-password, mb-keystore und mb-keystore-password, die Umgebungsvariablen MB_KEYSTORE_PASSWORD und MB_TRUSTSTORE_PASSWORD sowie die Konfigurationsübersicht liberty-ssl:
apiVersion: v1
kind: Service
metadata:
  name: liberty
  labels:
    name: liberty
spec:
  selector:
    name: liberty
  ports:
  - name: http
    protocol: TCP
    port: 9080
    targetPort: 9080
  - name: https
    protocol: TCP
    port: 9443
    targetPort: 9443
  type: NodePort
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: liberty
spec:
  replicas: 1
  template:
    metadata:
      labels:
        name: liberty
    spec:
      containers:
      - name: liberty
        image:  master.cfc:8500/admin/liberty:latest
        ports:
          - containerPort: 9080
          - containerPort: 9443
        readinessProbe:
          httpGet:
            path: /
            port: 9080
        env:
        - name: MB_KEYSTORE_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mb-keystore-password
              key: password
        - name: MB_TRUSTSTORE_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mb-truststore-password
              key: password
        volumeMounts:
        - name: keystores
          mountPath: /etc/wlp/config/keystore
          readOnly: true
        - name: truststores
          mountPath: /etc/wlp/config/truststore
          readOnly: true
        - name: liberty-ssl
          mountPath: /config/configDropins
          readOnly: true

      volumes:
        - name: keystores
          secret:
            secretName: mb-keystore
        - name: truststores
          secret:
            secretName: mb-truststore
        - name: liberty-ssl
          configMap:
            name: liberty-ssl
            items:
             - key: libertyssl.xml
               path: defaults/libertyssl.xml
      imagePullSecrets:
      - name: admin.registrykey
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: liberty
  labels:
    name: liberty
  annotations:
    kubernetes.io/ingress.class: "nginx"
    ingress.kubernetes.io/affinity: "cookie"
    ingress.kubernetes.io/session-cookie-name: "route"
    ingress.kubernetes.io/session-cookie-hash: "sha1"
    ingress.kubernetes.io/rewrite-target: /
    ingress.kubernetes.io/secure-backends: "true"
spec:
  rules:
  - host:
    http:
      paths:
      - path: /liberty
        backend:
          serviceName: liberty
          servicePort: 9443

Nächste Schritte

Führen Sie den Befehl kubectl aus, um die Anwendung zu implementieren. Greifen Sie über die folgende URL auf Ihre Anwendung zu:
https://<Ihre_Proxy-IP>/liberty

Symbol das den Typ des Artikels anzeigt. Taskartikel

Dateiname: twlp_icp_ssl.html