k8s创建secret并在container中获取secret

k8s创建secret并在container中获取secret

本文使用的deployment和service与我的上一篇文章一样。link也放在下面了,如果不懂什么事deployment和service,可以先看我的上一篇文章。
k8s使用kustomize来部署应用

下面我们将通过创建secret开始。secret是我们自己收到创建的,我们需要先通过下面的命令来创建分别存放username和password的文件。

echo -n 'admin' > ./username.txt
echo -n 'S!B\*d$zDsb=' > ./password.txt

下面我们通过一个命令把secret绑定到我们需要部署的命名空间,即dev-api中,secret的名字叫db-user-pass,存放有两对keypairs。

kubectl create -n dev-api secret generic db-user-pass \
    --from-file=username=./username.txt \
    --from-file=password=./password.txt

我们通过下面命令查看secret是否创建成功,如果有secret的详细信息,说明已经创建成功了。

# 查看secret
kubectl get secret -n dev-api
kubectl describe secret -n dev-api db-user-pass 

也可以使用下面命令解码secret看看。

kubectl get secret -n dev-api db-user-pass -o jsonpath='{.data.password}' | base64 --decode

方法一:使用挂载访问secret

下面我们更改deployment.yaml是的container中可以访问这个secret。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: api-helloworld # 部署的名称
  # namespace: dev-api # 部署到哪个命名空间, 使用kustomize的话这里不能出现,需要在overlays/dev/kustomization.yaml 指定
spec:
  replicas: 2  # 设置副本数量为2
  selector:
    matchLabels:
      app: api-helloworld # 用于选择匹配的Pod标签
  template:
    metadata:
      labels:
        app: api-helloworld # Pod的标签
    spec:
      containers:
      - name: api-helloworld-c # 容器名称
        # image: docker.io/library/restfulapi:latest # For image in container, use ctr -n k8s.io images import restfulapi.tar to import images
        image: restfulapi:1  # For image in docker
        imagePullPolicy: IfNotPresent # 镜像拉取策略,如果本地没有就拉取
        ports:
        - containerPort: 80 # 容器内部监听的端口
        volumeMounts:
        - name: secret-volume
          mountPath:  "/etc/secrets"
          readOnly: true
      volumes:
      - name: secret-volume
        secret:
          secretName: db-user-pass

想对于没有修改之前的版本,这里主要加入了对volume以及volumeMounts的描述,volume把secret定义在volume上面了,volumeMount则是把volume挂载到Pod.

主要变化。

      containers:
      - name: api-helloworld-c # 容器名称
        # image: docker.io/library/restfulapi:latest # For image in container, use ctr -n k8s.io images import restfulapi.tar to import images
        image: restfulapi:1  # For image in docker
        imagePullPolicy: IfNotPresent # 镜像拉取策略,如果本地没有就拉取
        ports:
        - containerPort: 80 # 容器内部监听的端口
        volumeMounts:
        - name: secret-volume
          mountPath:  "/etc/secrets"
          readOnly: true
      volumes:
      - name: secret-volume
        secret:
          secretName: db-user-pass

最后,我们重新部署一下。

cd overlay/dev
kubectl kustomize | kubectl apply -f -

在这里插入图片描述
当确定好Pod已经起来以后,我们就可以进去Pod里面看看我们的secret了。

kubectl exec -it -n dev-api api-helloworld-6c7c74fcbd-22prm -- bash
ls /etc/secrets/

在这里插入图片描述
可以看得到secret已经可以成功范围了,并且值得注意的是,当作为volume挂载进来Pod的时候,secret会自动的进行base64解码,这里直接就可以访问明文了。

方法二:使用环境变量方式访问secret

deployment.yaml如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: api-helloworld # 部署的名称
  # namespace: dev-api # 部署到哪个命名空间, 使用kustomize的话这里不能出现,需要在overlays/dev/kustomization.yaml 指定
spec:
  replicas: 2  # 设置副本数量为2
  selector:
    matchLabels:
      app: api-helloworld # 用于选择匹配的Pod标签
  template:
    metadata:
      labels:
        app: api-helloworld # Pod的标签
    spec:
      containers:
      - name: api-helloworld-c # 容器名称
        # image: docker.io/library/restfulapi:latest # For image in container, use ctr -n k8s.io images import restfulapi.tar to import images
        image: restfulapi:1  # For image in docker
        imagePullPolicy: IfNotPresent # 镜像拉取策略,如果本地没有就拉取
        ports:
        - containerPort: 80 # 容器内部监听的端口
        env:
        - name: SECRET_USERNAME
          valueFrom: 
            secretKeyRef:
              name: db-user-pass
              key: username
        - name: SECRET_PASSWORD
          valueFrom:
            secretKeyRef:
              name: db-user-pass
              key: password

上面主要是加入了env的相关描述,绑定到Pod里面的环境变量名分别为SECRET_USERNAME,SECRET_PASSWORD。同样,我们把deployment的变化直接apply到集群。

cd overlay/dev
kubectl kustomize | kubectl apply -f -

Pod确定起来以后,我们进去里面看看我们新绑定的env.

kubectl get pods -n dev-api
kubectl exec -it -n dev-api api-helloworld-797679c6c-5wk72 -- bash
env | grep SECRET

在这里插入图片描述
同样我们也可以在env中看到我们新绑定的secret,并且和卷绑定一样,可以看到是明文形式来存储的。

好了以上是本期分享的全部内容了,如果你觉得对你还有帮助,建议点赞分享并收藏哦。如果大家想对我表示肯定,扫描下面的二维码即可哦,原创不易,一分钱也是爱哦。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值