[17.0.0.3 and later]

Déploiement de Liberty avec Ingress à l'aide de SSL dans IBM Cloud Private

Lorsque vous demandez Ingress, le navigateur allant au proxy est sécurisé. Cependant, si vous souhaitez sécuriser la connexion d'arrière-plan, vous pouvez exécuter cette tâche.

Pourquoi et quand exécuter cette tâche

La mappe de configuration contient les substituts du fichier server.xml. Ces substituts activent la fonction requise pour SSL, configurent le serveur Liberty ou le service Liberty pour utiliser les certificats qui sont générés à l'usine.

Procédure

  1. Créez le fichier libertyssl.xml avec le contenu suivant :
    <?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. Créez la carte de configuration à partir du fichier créé à l'étape précédente :
    kubectl create configmap liberty -ssl --from-file=libertyssl.xml
  3. Vérifiez que les secrets Kubernetes existent. Exécutez la commande kubectl suivante et recherchez les secrets Kubernetes mb - truststore, mb - truststore, mb - keystore et mb - keystore - password dans la liste suivante :
    kubectl get secrets
  4. Exécutez la commande kubectl suivante et recherchez la valeur de la mappe de configuration liberty - ssl dans la liste :
    kubectl get configmap
  5. Dans le fichier deployment.yaml de votre service Liberty, créez le service suivant :
    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. Dans le fichier deployment.yaml de votre service Liberty, créez le fichier Ingress YAML suivant :
    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. Dans le fichier deployment.yaml de votre serveur Liberty ou service Liberty, créez les volumes sur lesquels les secrets et la mappe de configuration seront montés. Utilisez le fragment de code suivant sans le modifier :
    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. Dans le fichier deployment.yaml de votre serveur Liberty ou service Liberty, montez les volumes créés. Utilisez le fragment de code suivant sans le modifier :
    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. Dans le fichier deployment.yaml de votre serveur Liberty ou service Liberty, spécifiez les variables d'environnement faisant référence aux secrets Kubernetes. Utilisez le fragment de code suivant sans le modifier :
    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

Exemple

L'exemple suivant est un exemple de fichier de déploiement Liberty. L'exemple d'image utilise les secrets Kubernetes mb-truststore, mb-truststore-password, mb-keystore et mb-keystore-password, les variables d'environnement MB_KEYSTORE_PASSWORD et MB_TRUSTSTORE_PASSWORD et la mappe de configuration 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

Que faire ensuite

Exécutez la commande kubectl pour déployer l'application. Accédez à votre application à partir de l'URL suivante :
https://<yourproxyip>/liberty

Icône indiquant le type de rubrique Rubrique Tâche

Nom du fichier : twlp_icp_ssl.html