今日覚えて帰ること
base64コマンド
echo -n c2VjcmV0 | base64 -d
- echoに-nオプションをつけて改行が入らないようにする
- base64コマンドでdecodeしたいときは-dオプションをつける
Secret Read and Decode
Read and decode the Secrets in Namespace one
- Get the Secrets of type
Opaque
that have been created in Namespaceone
.- Create a new file called
/opt/ks/one
and store the base64-decoded values in that file. Each value needs to be stored on a new line.
secretをdecodeしてファイルに書き込め、と言っています。
ちなみに「Opaque」というのは不明瞭な、曖昧な、という意味の英単語です。
汎用的に使えるsecretの型で、迷ったらtypeはこれにしとこう的なやつです。
まずはsecretを確認します。
controlplane $ k get secret -n one
NAME TYPE DATA AGE
s1 Opaque 1 49s
s2 Opaque 1 49s
2つのsecretが存在するのでそれぞれ中身を見てみます。
controlplane $ k get secret s1 -n one -o yaml
apiVersion: v1
data:
data: c2VjcmV0
kind: Secret
metadata:
creationTimestamp: "2024-09-15T14:19:25Z"
name: s1
namespace: one
resourceVersion: "1577"
uid: 282a9eef-3145-4e87-a296-e272d2e94c1e
type: Opaque
controlplane $ k get secret s2 -n one -o yaml
apiVersion: v1
data:
data: YWRtaW4=
kind: Secret
metadata:
creationTimestamp: "2024-09-15T14:19:25Z"
name: s2
namespace: one
resourceVersion: "1578"
uid: 2e068ee4-4b5d-4a29-b733-212d406a0366
type: Opaque
それぞれdecodeします。
controlplane $ echo -n c2VjcmV0 | base64 -d
secretcontrolplane $
controlplane $ echo -n YWRtaW4= | base64 -d
admincontrolplane $
出力をリダイレクトして書き込もうと思いましたが、改行がちょっとめんどくさそうなのでそれぞれ単語を書き込んで終了です。
Read and decode the Secrets in Namespace two
- Get the Secrets of type
Opaque
that have been created in Namespacetwo
.- Create a new file called
/opt/ks/two
and store the base64-decoded values in that file. Each value needs to be stored on a new line.
先ほどとやることは全く同じなので解説は省略します。(何のための問題これ?)
Secret ServiceAccount Pod
簡単すぎたのでもう一問やります。
Create Namespace, ServiceAccount and Secrets
- Create new Namespace
ns-secure
and perform everything following in there- Create ServiceAccount
secret-manager
- Create Secret
sec-a1
with any literal content of your choice- Create Secret
sec-a2
with any file content of your choice (like/etc/hosts
)
namespace, sa, secretを作成しろと言っています。
今更やる必要あるのか、という感じなので手順だけ載せておきます。
controlplane $ k create ns ns-secure
namespace/ns-secure created
controlplane $ k create -n ns-secure sa secret-manager
serviceaccount/secret-manager created
controlplane $ k create -n ns-secure secret generic sec-a1 --from-literal=key=sec-a1
secret/sec-a1 created
controlplane $ k create -n ns-secure secret generic sec-a2 --from-file=/etc/hosts
secret/sec-a2 created
Create Pod that uses ServiceAccount and Secrets
- In Namespace
ns-secure
create Podsecret-manager
with imagehttpd:alpine
which uses the new ServiceAccount- Make Secret
sec-a1
available as environment variableSEC_A1
- Mount Secret
sec-a2
into the Pod read-only under/etc/sec-a2
- Verify your solution worked
pod作って環境変数をsecretから埋め込め、と言っています。
今更やる必要あるのか、という感じなので手順だけ載せておきます。
Make Secret sec-a1
available as environment variable SEC_A1
の手順で設定するKeyの値は先ほどこちら側で決めたkeyを入力します。
controlplane $ k run secret-manager -n ns-secure --image=serviceAccountName -oyaml --dry-run > pod.yaml
W0915 14:52:35.030579 13033 helpers.go:703] --dry-run is deprecated and can be replaced with --dry-run=client.
controlplane $ vi pod.yaml
controlplane $ cat pod.yaml
apiVersion: v1
kind: Pod
metadata:
labels:
run: secret-manager
name: secret-manager
namespace: ns-secure
spec:
volumes:
- name: sec-a2
secret:
secretName: sec-a2
serviceAccountName: secret-manager
containers:
- image: httpd:alpine
name: secret-manager
volumeMounts:
- name: sec-a2
mountPath: /etc/sec-a2
readOnly: true
env:
- name: SEC_A1
valueFrom:
secretKeyRef:
name: sec-a1
key: key
dnsPolicy: ClusterFirst
restartPolicy: Always