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
- 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>
- Créez la carte de configuration à partir du fichier créé à l'étape précédente :
kubectl create configmap liberty -ssl --from-file=libertyssl.xml
- 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
- Exécutez la commande kubectl suivante et recherchez la valeur de la mappe de configuration liberty - ssl dans la liste :
kubectl get configmap
- 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
- 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
- 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
- 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
- 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