欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

kubernetes secret加密设置

程序员文章站 2024-03-19 14:27:22
...

secret

Secret 对象类型用来保存敏感信息,例如密码、OAuth 令牌和 SSH **。 将这些信息放在 secret 中比放在 Pod 的定义或者容器镜像中来说更加安全和灵活。

创建secret

# 创建文件
echo -n 'admin' > username.txt
echo -n '123456' > password.txt
# 文件方式创建
[[email protected] secret]# kubectl create secret generic my-secret --from-file=./username.txt --from-file=./password.txt
secret/db-user-pass created
[[email protected] kubernetes]# kubectl get secret   #查看创建文件
NAME                  TYPE                                  DATA   AGE
db-user-pass          Opaque                                2      5h7m
default-token-m2gsx   kubernetes.io/service-account-token   3      6d21h

[[email protected] secret]# kubectl describe  secret/my-secret     #查看描述
Name:         db-user-pass
Namespace:    default
Labels:       <none>
Annotations:  <none>

Type:  Opaque

Data
====
username.txt:  5 bytes
password.txt:  6 bytes

secret创建成功后,查看描述,不显示用户名和密码,key 是 文件名

  • 字符串方式创建

    kubectl create secret generic secret-volum --from-literal=username=admin --from-literal=password=123456 
    

    特殊字符无需提前定义

  • 文本方式创建

    # 用户名密码编码
    echo -n 'admin'|base64
    echo -n '123456'|base64
    
    #查看secret 创建配置
    kubectl get secret secret-volum  -o yaml
    
    #创建 secret-file.yaml 文件
    apiVersion: v1
    kind: Secret
    metadata:
      name: mysql-secret
      namespace: default
    data:
      password.txt: MTIzNDU2  #文件方式创建,key 是文件名
      username.txt: YWRtaW4=
    type: Opaque
    
    
    # 文本中以 k=v形式创建
    apiVersion: v1
    data:
      pwd: MTIzNDU2
      un: YWRtaW4=
    kind: Secret
    metadata:
      name: mysql-secret-02
      namespace: default
    type: Opaque
    

加密文件使用

作为环境变量使用 secret-env.yaml

apiVersion: v1
kind: Pod
metadata:
  name: mypod-secret-1
spec:
  containers:
  - name: nginx
    image: nginx
    env:
      - name: SECRET_USERNAME  #用户名
        valueFrom:
          secretKeyRef:
            name: mysql-secret  # 从加密文件 mysql-secret中加载 key 为 username.txt 
            key: username.txt
      - name: SECRET_PASSWORD  #密码
        valueFrom:
          secretKeyRef:
            name: mysql-secret
            key: password.txt
            
  • 执行

    #生成pod
    kubectl apply -f secret-env.yaml
    #查看
    kubectl get pod 
    #查看环境变量,进入pod 执行查看
    kubectl exec -it mypod-secret-1 /bin/bash
    echo $SECRET_USERNAME
    echo $SECRET_PASSWORD
    

以容器形式挂载

  • 创建pod, secret-volum.yaml
apiVersion: v1
kind: Pod
metadata:
  name: mypod-secret-2
spec:
  containers:
  - name: nginx
    image: nginx
    volumeMounts:
    - name: foo # 卷名必须与容器外部卷名保持一致
      mountPath: "/etc/foo"	#容器内挂载路径
      readOnly: true
  volumes:  # 外部卷
  - name: foo  
    secret:
      secretName: mysecret
      

卷名称相同,名称为foo 的外部卷挂载到容器内部,容器内部地址:/etc/foo

apiVersion: v1
kind: Pod
metadata:
  labels:
    app: aliyun-app
  name: aliyun-app
spec:
  imagePullSecrets:
    name: private-image-secret  # 私有镜像加密配置,必须配置,否则创建失败
  containers:
  - image: registry.cn-zhangjiakou.aliyuncs.com/xxxxx/tomcat:8  #私有仓库镜像地址
    imagePullPolicy: Always
    name: aliyun-app
    ports:
    - containerPort: 8080
      name: http80
      protocol: TCP
  • 创建私有仓库**
kubectl create secret docker-registry private-image-secret --docker-server=registry.cn-zhangjiakou.aliyuncs.com --docker-username=私有仓库用户名  --docker-password=密码
  • 执行
kubectl apply -f secret-image.yaml