[17.0.0.3 and later]

IBM Cloud Private에서 SSL을 사용하여 Ingress로 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 - truststore, mb - truststore, mb - keystoremb - 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 배치 파일의 샘플입니다. 샘플 이미지는 Kubernetes 시크릿(mb-truststore, mb-truststore-password, mb-keystoremb-keystore-password), 환경 변수(MB_KEYSTORE_PASSWORDMB_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