Déployer le service myboot :
kubectl apply -f apps/kubefiles/myboot-deployment.yml
Déployer le service myboot :
kubectl apply -f apps/kubefiles/myboot-service.yml
Regardez vos Pods:
watch kubectl get pods
Regardez vos services:
watch kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
myapp LoadBalancer 172.30.103.41 <pending> 8080:31974/TCP 4s
Attendez 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 44s
Cré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:$PORT
L’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.
kubectl create secret generic mysecret --from-literal=user='MyUserName' --from-literal=password='mypassword'
kubectl get secrets
NAME 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 5s
L’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 bytes
apiVersion: 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: Opaque
Vous pouvez voir les secrets en courant :
echo 'bXlwYXNzd29yZA==' | base64 --decode
mypassword
echo 'TXlVc2VyTmFtZQ==' | base64 --decode
MyUserName
Ou les obtenir en utilisant kubectl :
kubectl get secret mysecret -o jsonpath='{.data.password}' | base64 --decode
Les secrets sont fournis au Pod via des montages de volumes :
volumeMounts:
- name: mysecretvolume
mountPath: /mystuff/mysecretvolume
Nouveau déploiement avec le volume secret :
vim apps/kubefiles/myboot-deployment-configuration-secret.yml
apiVersion: 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: mysecret
kubectl replace -f apps/kubefiles/myboot-deployment-configuration-secret.yml
Exec dans le Pod nouvellement créé :
PODNAME=$(kubectl get pod -l app=myboot -o name)
kubectl exec $PODNAME -- cat /mystuff/secretstuff/password
Résultat
mypassword
Vous 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 myboot