今日覚えて帰ること
SecretをファイルとしてPodから利用する
podにマウントしたsecretの連想配列dataのキーは、mountPath以下のファイル名になる。
Secret Access in Pods
Create Secrets
- Create a Secret named
holy
with contentcreditcard=1111222233334444
- Create Secret from file
/opt/ks/secret-diver.yaml
Secretを作成しろと言っています。
瞬殺なので特に解説はしません。
controlplane $ k create secret generic holy --from-literal=creditcard=1111222233334444
secret/holy created
controlplane $ k apply -f /opt/ks/secret-diver.yaml
secret/diver created
Access Secrets in Pod
- Create a Pod named
pod1
of imagenginx
- Make Secret
holy
available as environment variableHOLY
- Mount Secret
diver
as volume. The file should be available under/etc/diver/hosts
.- Test env+volume access in the running Pod
podを立ててそのpod内でSecretを使えるようにせよ、と書いています。
これも余裕かと思いきゃ、3で少し手こずりました。
podのマニフェストファイルを作成し、手を加えていきます。
参考にするページはこちら。
Secret
Secretとは、パスワードやトークン、キーなどの少量の機密データを含むオブジェクトのことです。 このような情報は、Secretを用いないとPodの定義やコンテナイメージに直接記載することになってしまうかもしれません。 Secretを使用すれば、アプリケーションコードに機密データを含める必要がなくなります。 なぜなら、...
controlplane $ k run pod1 --image=nginx -oyaml --dry-run > pod.yaml
W0915 10:20:22.641396 35839 helpers.go:703] --dry-run is deprecated and can be replaced with --dry-run=client.
手を加えたマニフェストファイルがこちら。
controlplane $ cat pod.yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: pod1
name: pod1
spec:
containers:
- image: nginx
name: pod1
env:
- name: HOLY
valueFrom:
secretKeyRef:
name: holy
key: creditcard
volumeMounts:
- name: diver
mountPath: "/etc/diver"
readOnly: true
resources: {}
volumes:
- name: diver
secret:
secretName: diver
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}
変更点を赤字に、3にかかわる箇所をさらに太字にしています。
2は公式ページ通りにやればいいので解説は省略します。
3について、ファイルの配置ルールは以下のようになります。
イメージやコマンドラインを変更し、プログラムがそのディレクトリを参照するようにします。連想配列
data
のキーはmountPath
以下のファイル名になります。
今回対象となるSecretを確認します。
controlplane $ cat /opt/ks/secret-diver.yaml
apiVersion: v1
data:
hosts: MTI3LjAuMC4xCWxvY2FsaG9zdAoxMjcuMC4xLjEJaG9zdDAxCgojIFRoZSBmb2xsb3dpbmcgbGluZXMgYXJlIGRlc2lyYWJsZSBmb3IgSVB2NiBjYXBhYmxlIGhvc3RzCjo6MSAgICAgbG9jYWxob3N0IGlwNi1sb2NhbGhvc3QgaXA2LWxvb3BiYWNrCmZmMDI6OjEgaXA2LWFsbG5vZGVzCmZmMDI6OjIgaXA2LWFsbHJvdXRlcnMKMTI3LjAuMC4xIGhvc3QwMQoxMjcuMC4wLjEgaG9zdDAxCjEyNy4wLjAuMSBob3N0MDEKMTI3LjAuMC4xIGNvbnRyb2xwbGFuZQoxNzIuMTcuMC4zNSBub2RlMDEKMTcyLjE3LjAuMjMgY29udHJvbHBsYW5lCg==
kind: Secret
metadata:
name: diver
すなわち、mountPath: “/etc/diver” 配下に hosts といファイルが作成されることになります。
これもまあ公式ページに書いてることではあるんですが、あまりちゃんと見ないでmountPath: “/etc/diver/hosts”と設定するミスをしてしまったので注意喚起をしておきます。
最後にSecretにアクセスできることを確認して完了です。
controlplane $ kubectl exec pod1 -- env | grep "HOLY=1111222233334444"
HOLY=1111222233334444
controlplane $
controlplane $ kubectl exec pod1 -- cat /etc/diver/hosts
127.0.0.1 localhost
127.0.1.1 host01
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
127.0.0.1 host01
127.0.0.1 host01
127.0.0.1 host01
127.0.0.1 controlplane
172.17.0.35 node01
172.17.0.23 controlplane
controlplane $