7,540
edits
Changes
→Volumes
<br>
=Security=
==Kubernetes secret==
===dockerconfigjson===
https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/<br>
A '''dockerconfigjson''' típusú secret docker privát repozitorikhoz való csatlakozáshoz szükséges adatokat tárol:
* csatlakozási URL
* username
* password
* email cím
A dockerconfigjson típusú secret-et a '''create secret docker-registry''' paranccsal hozhatjuk létre.
<pre>
# kubectl create secret docker-registry <secret-name> --docker-server=<your-registry-server> --docker-username=<your-name> --docker-password=<your-pword> --docker-email=<your-email>
</pre>
Az elkészült yaml fájl az alábbi kritériumoknak kell megfeleljen:
* type: kubernetes.io/dockerconfigjson
* A data-ban egy darab mező lehet, aminek a kulcsa: .dockerconfigjson
* A .dockerconfigjson mező értéke Base64-elt JSON-ban tartalmazza a csatlakozási információkat (user, pass, email, URL)
<source lang="C++">
apiVersion: v1
kind: Secret
type: kubernetes.io/dockerconfigjson
metadata:
...
data:
.dockerconfigjson: eyJodHRwczovL2luZGV4L ... J0QUl6RTIifX0=
</source>
A JSON tartalma az alábbi:
<pre>
{"auths":{"your.private.registry.example.com":{"username":"janedoe","password":"xxxxxxxxxxx","email":"jdoe@example.com","auth":"c3R...zE2"}}}
</pre>
ServiceAccount-okban illetve a deployment leírókba be lehet hivatkozni a docker-repository secret-eket a '''imagePullSecrets''' szekcióban:
<source lang="C++">
apiVersion: v1
kind: ServiceAccount
imagePullSecrets:
- name: pull-secret-example1
- name: pull-secret-example2
...
</source>
....!!! hova kerül ez mountolásra a pod-ban???....
<br>
<br>
==ServiceAccount==
Minden névtérnek van egy default service-caccount-ja, aminek a neve '''default'''. Ha külön nem adunk meg service-account-ot, akkor ezt fogja használni minden deployment.
A service account-ot tartalmazza azokat a certifikációkat, amivel a Kubernetes azonosítja az adott account-ot. A '''kubectl create serviceacount''' paranccsal létrejön az account és hozzá le is generálja a Kubernetes a szükséges secret-eket.
<pre>
# kubectl create serviceaccount prometheus-kube-state-metrics -n mynamespace
</pre>
Ez jött belőle létre:
<source lang="C++">
apiVersion: v1
imagePullSecrets:
- name: prometheus-kube-state-metrics-dockercfg-rngd8
kind: ServiceAccount
metadata:
labels:
app: prometheus
chart: prometheus-8.14.0
component: kube-state-metrics
heritage: Tiller
release: prometheus
name: prometheus-kube-state-metrics
namespace: mynamespace
secrets:
- name: prometheus-kube-state-metrics-token-t4d6r
- name: prometheus-kube-state-metrics-dockercfg-rngd8
</source>
'''imagePullSecrets''': Az itt megadott secret-ben lévő ceritifkációt fogja használni az image repository-hoz való csatlakozáshoz minden olyan Deployment vagy DemonSet, ami ezzel a service-account-al fut.
'''secrets''': Az ebben a szekcióban megadott secret-ek
Készíthetünk service-account-ot úgy is, hogy létrehozunk egy 'üres' serviceAccount definíciót. Ekkor a Kubernetes ugyan úgy létre fogja hozzá hozni a token-eket. <br>
prometheus-kube-state-metrics.yaml
<source lang="C++">
apiVersion: v1
kind: ServiceAccount
metadata:
name: prometheus-kube-state-metrics
namespace: mynamespace
</source>
<pre>
# kubectl apply -f prometheus-kube-state-metrics.yaml
</pre>
<br>
===ServiceAccount secret-ek===
Minden service-account-hoz létrejön autómatikusan két secret:
* <service-account név>-dockercfg-<azonosító>
* <service-account név>-token-<azonosító>
A dockercfg-ben van az összes olyan docker registry elérhetősége, ahonnan le tudja húzni az image-t az a Deployment ami ezt a serviceAccount-ot használja. Nézzünk bele ebbe a docker-es secret-be:
<pre>
# kubectl get secret prometheus-kube-state-metrics-dockercfg-rngd8 -n mynamespace -o yaml
---------------------------
apiVersion: v1
data:
.dockercfg: eyIxNzIuMzAuMS4xOjUwMDAiO....
kind: Secret
metadata:
annotations:
kubernetes.io/service-account.name: prometheus-kube-state-metrics
kubernetes.io/service-account.uid: d3615a80-acb9-11e9-ab6f-525400efb4ec
openshift.io/token-secret.name: prometheus-kube-state-metrics-token-w9qjx
name: prometheus-kube-state-metrics-dockercfg-rngd8
namespace: mynamespace
type: kubernetes.io/dockercfg
</pre>
Ha Base64-el dekódoljuk a tartalmat, ezt találjuk benne.
<pre>
{"172.30.1.1:5000":{"username":"serviceaccount","password":"eyJhbGciOiJSUz...1lYwAtg","email":"serviceaccount@example.org","auth":"c2Vydml...Zw=="},"docker-registry.default.svc.cluster.local:5000":{"username":"serviceaccount","password":"eyJhbGciOiJSU....}}
</pre>
A token-es secret-ben pedig a ca, a cert és a token van:
<pre>
# kubectl get secret prometheus-kube-state-metrics-token-t4d6r -n mynamespace -o yaml
---------------------------------------
apiVersion: v1
data:
ca.crt: LS0tLS1CRUdJTi...
namespace: bXluYW1lc3BhY2U=
service-ca.crt: LS0tLS1CRU...
token: ZXlKaGJHY2l..
kind: Secret
metadata:
name: prometheus-kube-state-metrics-token-t4d6r
namespace: mynamespace
type: kubernetes.io/service-account-token
</pre>
<br>
<br>
=Volumes=