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
- 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>
- Erstellen Sie die Konfigurationsübersicht aus der Datei, die Sie im vorherigen Schritt erstellt haben:
kubectl create configmap liberty -ssl --from-file=libertyssl.xml
- 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
- 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
- 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
- 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
- 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
- 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
- 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