Secret
Prérequis
Déployer le service myboot :
kubectl apply -f apps/kubefiles/myboot-deployment.ymlDéployer le service myboot :
kubectl apply -f apps/kubefiles/myboot-service.ymlRegardez vos Pods:
watch kubectl get podsRegardez vos services:
watch kubectl get servicesNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
myapp LoadBalancer 172.30.103.41 <pending> 8080:31974/TCP 4sAttendez jusqu’à ce que vous voyez une IP externe assignée.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
myapp LoadBalancer 172.30.103.41 34.71.122.153 8080:31974/TCP 44sCréer les variables IP et PORT :
IP=$(minikube ip)
PORT=$(kubectl get service/myboot -o jsonpath="{.spec.ports[*].nodePort}")Réaliser une requete du service :
curl $IP:$PORTL’exemple de ConfigMap présenté précédemment contenait une chaîne de connexion à une base de données (“user=MyUserName;password=*”). Les données sensibles comme les mots de passe peuvent être placées dans un autre récipient appelé Secret.
Créer des secrets
kubectl create secret generic mysecret --from-literal=user='MyUserName' --from-literal=password='mypassword'kubectl get secretsNAME TYPE DATA AGE
builder-dockercfg-96ml5 kubernetes.io/dockercfg 1 3d6h
builder-token-h5g82 kubernetes.io/service-account-token 4 3d6h
builder-token-vqjqz kubernetes.io/service-account-token 4 3d6h
default-dockercfg-bsnjr kubernetes.io/dockercfg 1 3d6h
default-token-bl77s kubernetes.io/service-account-token 4 3d6h
default-token-vlzsl kubernetes.io/service-account-token 4 3d6h
deployer-dockercfg-k6npn kubernetes.io/dockercfg 1 3d6h
deployer-token-4hb78 kubernetes.io/service-account-token 4 3d6h
deployer-token-vvh6r kubernetes.io/service-account-token 4 3d6h
mysecret Opaque 2 5sL’utilisateur et le mot de passe ne sont pas immédiatement visibles :
Name: mysecret
Namespace: myspace
Labels: <none>
Annotations: <none>
Type: Opaque
Data
====
password: 10 bytes
user: 10 bytesapiVersion: v1
data:
password: bXlwYXNzd29yZA==
user: TXlVc2VyTmFtZQ==
kind: Secret
metadata:
creationTimestamp: "2020-03-31T20:19:26Z"
name: mysecret
namespace: myspace
resourceVersion: "4944690"
selfLink: /api/v1/namespaces/myspace/secrets/mysecret
uid: e8c5f12e-bd71-4d6b-8d8c-7af9ed6439f8
type: OpaqueVous pouvez voir les secrets en courant :
echo 'bXlwYXNzd29yZA==' | base64 --decodemypasswordecho 'TXlVc2VyTmFtZQ==' | base64 --decodeMyUserNameOu les obtenir en utilisant kubectl :
kubectl get secret mysecret -o jsonpath='{.data.password}' | base64 --decodeLes secrets sont fournis au Pod via des montages de volumes :
volumeMounts:
- name: mysecretvolume
mountPath: /mystuff/mysecretvolumeNouveau déploiement avec le volume secret :
vim apps/kubefiles/myboot-deployment-configuration-secret.ymlapiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: myboot
name: myboot
spec:
replicas: 1
selector:
matchLabels:
app: myboot
template:
metadata:
labels:
app: myboot
spec:
containers:
- name: myboot
image: quay.io/rhdevelopers/myboot:v1
ports:
- containerPort: 8080
volumeMounts:
- name: mysecretvolume #<.>
mountPath: /mystuff/secretstuff
readOnly: true
resources:
requests:
memory: "300Mi"
cpu: "250m" # 1/4 core
limits:
memory: "400Mi"
cpu: "1000m" # 1 core
volumes:
- name: mysecretvolume #<.>
secret:
secretName: mysecretkubectl replace -f apps/kubefiles/myboot-deployment-configuration-secret.ymlExec dans le Pod nouvellement créé :
PODNAME=$(kubectl get pod -l app=myboot -o name)
kubectl exec $PODNAME -- cat /mystuff/secretstuff/passwordRésultat
mypasswordVous pourriez fournir l’emplacement de /mystuff/mysecretvolume au pod via une variable d’environnement afin que l’application sache où chercher.
Supprimer vos ressources
kubectl delete deployment myboot
kubectl delete service mybootA vous de jouez !
CreateContainerConfigError est une erreur d’exécution qui apparaît lorsque le conteneur est incapable de démarrer, avant même que l’application à l’intérieur du conteneur ne démarre.
Déployez cette application :
---
apiVersion: v1
kind: Service
metadata:
annotations:
app.quarkus.io/commit-id: 91d4fef5457795ed2a1a38daeeaee4837254b390
app.quarkus.io/build-timestamp: 2022-05-27 - 12:35:51 +0000
labels:
app.kubernetes.io/name: hello-fix
app.kubernetes.io/version: 1.0.0
name: hello-fix
spec:
ports:
- name: http
port: 80
targetPort: 8080
selector:
app.kubernetes.io/name: hello-fix
app.kubernetes.io/version: 1.0.0
type: LoadBalancer
---
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
app.quarkus.io/commit-id: 91d4fef5457795ed2a1a38daeeaee4837254b390
app.quarkus.io/build-timestamp: 2022-05-27 - 12:35:51 +0000
labels:
app.kubernetes.io/version: 1.0.0
app.kubernetes.io/name: hello-fix
name: hello-fix
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/version: 1.0.0
app.kubernetes.io/name: hello-fix
template:
metadata:
annotations:
app.quarkus.io/commit-id: 91d4fef5457795ed2a1a38daeeaee4837254b390
app.quarkus.io/build-timestamp: 2022-05-27 - 12:35:51 +0000
labels:
app.kubernetes.io/version: 1.0.0
app.kubernetes.io/name: hello-fix
spec:
containers:
- env:
- name: KUBERNETES_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
envFrom:
- secretRef:
name: maria
image: quay.io/rhdevelopers/hello-fix:1.0.0
imagePullPolicy: Always
livenessProbe:
failureThreshold: 3
httpGet:
path: /q/health/live
port: 8080
scheme: HTTP
initialDelaySeconds: 0
periodSeconds: 5
successThreshold: 1
timeoutSeconds: 10
name: hello-fix
ports:
- containerPort: 8080
name: http
protocol: TCP
---
apiVersion: v1
kind: Secret
metadata:
name: mariadb
type: OpaqueUne fois déployé, veuillez vérifier l’état du pod en utilisant la commande :
kubectl get podsLe résultat serait similaire à :
NAME READY STATUS RESTARTS AGE
hello-fix-7c5fffc8c8-j2h8g 0/1 CreateContainerConfigError 0 20sVous devez trouver pourquoi il échoue et corriger le déploiement pour être en état READY.