最近准备花一周的时间准备CKS考试,在准备考试中发现有一个题目关于读取、创建以及挂载secret的题目。
专栏其他文章:
- [CKS] Create/Read/Mount a Secret in K8S-CSDN博客
- [CKS] Audit Log Policy-CSDN博客
-[CKS] 利用falco进行容器日志捕捉和安全监控-CSDN博客- [CKS] K8S NetworkPolicy Set Up-CSDN博客
- [CKS] K8S AppArmor Set Up-CSDN博客
- [CKS] 利用Trivy对image进行扫描-CSDN博客
- [CKS] kube-batch修复不安全项-CSDN博客
- [CKS] K8S ServiceAccount Set Up-CSDN博客
- [CKS] K8S Admission Set Up-CSDN博客
- [CKS] K8S Dockerfile和yaml文件安全检测-CSDN博客
- CKS真题
- CKA真题
What's the Secret
详细介绍参见这篇官方介绍: https://v1-28.docs.kubernetes.io/docs/concepts/configuration/secret/
Question 1
Get the username data from the curly Secret in the larry namespace and save it to /home/cloud_user/username.txt on the CLI server.
Then, get the password data and save it to /home/cloud_user/password.txt on the CLI server.
这个题目就是要求我们读取username和password在larry命令空间下的curly secret资源下。并且将结果存在username.txt和password.txt文件中
Practice
在这里需要明确的是secret存储的内容是base64编码的,所以这儿第一步需要将base64的编码数据给获取到,我们可以使用下面的命令打印出该secret的详细内容
shell
kubectl get secret curly -n larry -o yaml
这里我们将会获得如下结果
这里我们就知道了以下内容:
- password的base64编码为:MTIzNDUK
- username的base64编码为:YWRtaW4K
由此,现在我们就需要对这个base64进行解码,并存储在username.txt和password.txt文件中,我们可以使用以下两条命令完成
shell
echo MTIzNDUK | base64 --decode > password.txt
echo YWRtaW4K | base64 --decode > username.txt
Question 2
Create a new secret in the larry namespace called moe.
Provide fields called username and password and store the following username and password credentials in the Secret:
username dbuser
password A83MaeKoz
Create a Pod called secret-pod in the larry namespace.
Mount the new Secret to /etc/credentials in the Pod's container.
这个题目要求我们创建一个moe的secret,里面需要存储username为dbuser,password为A83MaeKoz,然后创建一个secret-pod,将这个secret进行挂载在pod的/etc/credentials
Practice
刚才我们说了,secret里面存储的是base64编码的内容,所以第一步我们需要将这个明文的username和password进行一个base64的编码,可以使用如下两个命令:
shell
echo dbuser | base64
# 结果为: ZGJ1c2VyCg==
echo A83MaeKoz | base64
# 结果为: QTgzTWFlS296Cg==
然后创建moe.yaml, 文件内容如下:
yaml
apiVersion: v1
data:
password: QTgzTWFlS296Cg==
username: ZGJ1c2VyCg==
kind: Secret
metadata:
name: moe
namespace: larry
type: Opaque
使用下面的命令创建secret:
shell
kubectl create -f moe.yaml
最后,修改并创建/home/cloud_user/secret-pod.yml
对应的pod,修改的内容如下:
yml
apiVersion: v1
kind: Pod
metadata:
name: secret-pod
namespace: larry
spec:
volumes:
- name: secret-volume
secret:
secretName: moe
containers:
- name: busybox
image: busybox:1.33.1
command: ['sh', '-c', 'cat /etc/credentials/username; cat /etc/credentials/password; while true; do sleep 5; done']
volumeMounts:
- name: secret-volume
readOnly: true
mountPath: /etc/credentials
最后使用kubectl create -f secret-pod.yml
创建pod
验证
shell
kubectl logs secret-pod -n larry
结果如下: