Kubernetes——配置资源管理

目录

一、Secret

1、定义

2、四种Secret类型

3、Pod使用Secret的方式

●作为挂载到一个或多个容器上的卷 中的文件。

●作为容器的环境变量。

●由 kubelet 在为 Pod 拉取镜像时使用。

4、应用场景

5、Secret的实例

①使用kubectl的create命令来指定文件创建Secret

②内容使用base64编码创建Secret

③通过Volume挂载的方式创建Secret

④通过将Secret导出到环境变量

⑤使用Secret配置实现免密交互拉取Harbor私有仓库镜像

⑤-①创建私有仓库的Secret资源

⑤-②引用Secret资源拉取私有仓库镜像创建pod

⑤-③注意

⑥案例

⑥-①数据库凭证管理:

⑥-②API密钥和访问令牌:

⑥-③SSH密钥:

⑥-④TLS证书:

⑥-⑤配置文件加密:

二、ConfigMap——存储配置信息的资源

1、定义

2、用途

3、实例

①创建configmap资源

②文件创建configmap资源

③字面参数创建configmap资源

④pod中使用configmap

⑤configmap设置命令行参数

⑥通过数据卷插件使用configmap

4、configmap热更新

三、总结

1、secret的类型

2、创建secret的方式

①陈述式

②挂载

③环境变量

3、configmap

3.1创建configmap的方式

3.2configmap资源使用

3.3configmap资源的更新


一、Secret

1、定义

Secret 是用来保存密码、token、密钥等敏感数据的 k8s 资源,这类数据虽然也可以存放在 Pod 或者镜像中,但是放在 Secret 中是为了更方便的控制如何使用数据,并减少暴露的风险。

2、四种Secret类型

①opaque 通用类型(可以通过文件 目录、变量创建)默认类型

②kubernetes.io/service-account-token k8s自动创建的给 serviceaccount 服务账号(podza在k8s集群内部的专属服务用户)访问APiserver使用

③kubernetes.io/dockerconfigjson 给k8s 从harbor私有镜像仓库 去镜像认证使用

④kubernetes.io/tls 通过TLS 证书来认证的 (私有文件、秘钥)

3、Pod使用Secret的方式

Pod 需要先引用才能使用某个 secret,Pod 有 3 种方式来使用 secret:

●作为挂载到一个或多个容器上的卷 中的文件。

在Kubernetes中,Secret资源提供了一种安全的方式来存储和管理敏感信息,如密码、OAuth令牌、SSH密钥等。Pod可以通过以下三种方式使用Secret:

●作为容器的环境变量。

当你想要在Pod的容器中访问Secret中的数据时,可以将Secret挂载为一个卷。这样,Secret中的数据就会以文件的形式出现在容器的文件系统中。例如,你可以将数据库密码挂载到容器的某个目录下,容器内的应用程序就可以通过读取这些文件来获取所需的凭据。

●由 kubelet 在为 Pod 拉取镜像时使用。

如果你的Pod需要从私有Docker Registry拉取镜像,你可以创建一个包含registry认证信息的Secret。这个Secret会被kubelet用来在拉取镜像时进行认证,而不需要在Pod的配置中直接暴露这些认证信息。

4、应用场景

在实际应用中,Secret常用于存储和管理各种凭据,比如数据库访问密码、API服务的访问令牌、SSH密钥等。这些凭据通常不应该直接硬编码在应用程序代码中,也不应该存储在容器镜像或者配置文件中。使用Secret可以确保这些敏感信息的安全性,并且便于管理和更新。

例如,可能有一个Web应用程序,它需要连接到一个后端数据库。可以创建一个包含数据库用户名和密码的Secret,然后在Pod的配置中引用这个Secret,将其作为环境变量或者文件挂载到容器中。这样,应用程序就可以在运行时安全地访问这些凭据,而无需在代码中直接处理敏感信息。

为了确保Secret的安全性,Kubernetes还提供了一些额外的保护措施,比如限制对Secret的访问,以及在Pod被删除后自动清除其在节点上的Secret副本。此外,Kubernetes还支持将Secret标记为不可变的(immutable),以防止意外或不必要的更新导致应用程序中断。

5、Secret的实例

①使用kubectl的create命令来指定文件创建Secret

创建了一个名为cxksecret的Secret,并且包含了两个文件:username.txt和password.txt。这些文件分别包含了用户名和密码。在Kubernetes中,Secret的内容是加密存储的,以确保敏感信息的安全。因此,即使使用kubectl get secret或kubectl describe secret命令,也不会显示Secret的实际内容

mkdir /opt/secrets
cd /opt/secrets/
 
echo -n "rmh" > usrname.txt
echo -n "zhenshuai123" > password.txt
 
kubectl create secret generic rmhsecret --from-file=usrname.txt --from-file=password.txt 
#首先创建了两个文本文件,一个包含用户名,另一个包含密码。然后,使用kubectl create secret generic命令创建了一个名为cxksecret的Secret,并指定了这两个文件作为数据源。
 
kubectl get secrets 
 
kubectl describe secrets rmhsecret 
 
#get或describe指令都不会展示secret的实际内容,这是出于对数据的保护的考虑

②内容使用base64编码创建Secret

使用base64编码创建了一个新的Secret资源cxksecret1。在这个过程中,首先将用户名和密码转换为base64编码的字符串,然后将这些编码后的数据直接写入到一个YAML文件secret.yaml中,最后使用kubectl create -f secret.yaml命令创建了Secret。

echo -n "rmh" | base64
Y3hr
 
echo -n "zhenshaui123" | base64
YWJjMTIz
 
 
#使用echo命令和管道|将用户名和密码通过base64命令进行编码。这样,得到了可以安全传输的编码字符串。

[root@master01 secrets]]#vim secret.yaml

apiVersion: v1
kind: Secret
metadata:
  name: rmhsecret1
type: Opaque
data:
  username: cm1o
  password: emhlbnNodWFp

 
kubectl create -f secret.yaml 
 
kubectl get secrets
 
kubectl describe secrets rmhsecret1
 
 
#创建了一个名为secret.yaml的文件,其中包含了Secret的定义。在这个文件中,指定了Secret的名称cxksecret1,类型为Opaque,并提供了编码后的用户名和密码。

③通过Volume挂载的方式创建Secret
vim volume-sc.yaml
 
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: nginx
    image: nginx
    volumeMounts:
    - name: secrets
      mountPath: "/etc/secrets"
      readOnly: true
  volumes:
  - name: secrets
    secret:
      secretName: rmhsecret
 
#创建了一个名为volume-sc.yaml的YAML文件,定义了一个Pod,其中包含一个容器(使用nginx镜像)。在Pod的spec部分,指定了一个卷secrets,它引用了名为cxksecret的Secret,并将其挂载到容器的/etc/secrets目录。
 
kubectl exec -it mypod sh
 
cd /etc/secrets/
cat password.txt
cat username.txt
#可以查看password.txt和username.txt文件的内容。这些文件包含了在创建Secret时定义的用户名和密码。
 
#请注意,由于在Pod定义中设置了readOnly: true,这意味着Secret卷是以只读模式挂载的,不能修改这些文件。这是处理敏感数据时的一个安全最佳实践。如果需要修改Secret中的数据,应该在Kubernetes集群外部进行,然后更新Secret资源。

④通过将Secret导出到环境变量

创建了一个名为mypod1的Pod,并将mysecret1 Secret中的特定键(usernamepassword)导出为环境变量。这样,Pod中的容器就可以通过环境变量访问这些敏感信息。

kubectl describe secrets rmhsecret1 
 
vim env-sc.yaml
 
apiVersion: v1
kind: Pod
metadata:
  name: mypod1
spec:
  containers:
  - name: nginx
    image: nginx
    env:
      - name: TEST_USER
        valueFrom:
          secretKeyRef:
            name: rmhsecret1
            key: username
      - name: TEST_PASSWORD
        valueFrom:
          secretKeyRef:
            name: rmhsecret1
            key: password
 
kubectl apply -f env-sc.yaml
 
kubectl get pod
 
kubectl exec -it mypod1 bash
 
root@mypod1:/# echo $TEST_USER
rmh
root@mypod1:/# echo $TEST_PASSWORD
zhenshuai123
root@mypod1:/# env|grep TEST
TEST_USER=rmh
TEST_PASSWORD=zhenshuai123

⑤使用Secret配置实现免密交互拉取Harbor私有仓库镜像
⑤-①创建私有仓库的Secret资源

首先,先创建一个Secret资源,这个资源将包含访问Harbor私有仓库所需的认证信息,如用户名和密码。

使用kubectl命令创建一个名为myhabrbor的Secret资源,指定Docker Registry服务器地址、用户名密码和邮箱。

kubectl create secret docker-registry myharbor --docker-server 192.168.170.111 \
--docker-username admin --docker-password Harbor12345 --docker-email [email protected]
⑤-②引用Secret资源拉取私有仓库镜像创建pod

在创建pod时,你需要在pod的配置中引用上面创建的Secret的名称

nodeName: node02
imagePullSecrets:
  - name: myharbor
image: /test/nginx-test:v1
dnsPolicy: ClusterFirst
restartPolicy: Always
⑤-③注意

确保Harbor仓库的默认配置为HTTPS,因为Kubernetes默认使用HTTPSDocker Registry

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值