[17.0.0.3 and later]

SSL を使用した Ingress での IBM Cloud Private への Liberty のデプロイ

Ingress を要求すると、プロキシーへのブラウザーは保護されます。ただし、バックエンド接続を保護する場合は、以下のタスクを実行します。

このタスクについて

構成マップには、server.xml ファイルのオーバーライドが含まれています。これらのオーバーライドにより、SSL に必要なフィーチャーが有効になり、ファブリックから生成された証明書を使用するように Liberty サーバーまたは Liberty サービスが構成されます。

手順

  1. ファイル libertyssl.xml を以下の内容で作成します。
    <?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. 前のステップで作成したファイルから、以下のようにして構成マップを作成します。
    kubectl create configmap liberty -ssl --from-file=libertyssl.xml
  3. Kubernetes の秘密が存在することを確認します。 以下の kubectl コマンドを実行し、以下のリストの mb - truststoremb - truststoremb - keystore、および mb - keystore - password の Kubernetes の秘密を見つけます。
    kubectl get secrets
  4. 以下の kubectl コマンドを実行し、リストから liberty - ssl の構成マップ値を見つけます。
    kubectl get configmap
  5. Liberty サービスの deployment.yaml ファイル内で、以下のサービスを作成します。
    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. Liberty サービスの deployment.yaml ファイル内で、以下の Ingress YAML ファイルを作成します。
    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. Liberty サーバーまたは Liberty サービスの deployment.yaml ファイル内で、秘密と構成マップをマウントするボリュームを作成します。 以下のコード・スニペットを変更せずに使用します。
    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. Liberty サーバーまたは Liberty サービスの deployment.yaml ファイル内で、作成したボリュームをマウントします。 以下のコード・スニペットを変更せずに使用します。
    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. Liberty サーバーまたは Liberty サービスの deployment.yaml ファイル内で、Kubernetes の秘密を参照する環境変数を指定します。 以下のコード・スニペットを変更せずに使用します。
    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

以下の例は、サンプル Liberty デプロイメント・ファイルです。このサンプル・イメージは、mb-truststoremb-truststore-passwordmb-keystore、および mb-keystore-password の Kubernetes の秘密、MB_KEYSTORE_PASSWORD 環境変数と MB_TRUSTSTORE_PASSWORD 環境変数、および 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

次のタスク

kubectl コマンドを実行してアプリケーションをデプロイします。以下の URL からアプリケーションにアクセスします。
https://<yourproxyip>/liberty

トピックのタイプを示すアイコン タスク・トピック

ファイル名: twlp_icp_ssl.html