Kubernetes# 管理配置数据ConfigMap和Secret

目录

基本概念

ConfigMap

Secret

配置对比

数据存储形式

数据访问形式

安全性


基本概念

Kubernetes为我们提供了两种配置资源对象,用来管理一些敏感数据的配置以及业务数据的配置,ConfigMapSecret 是 Kubernetes 中用于管理配置数据的两种资源类型,二者在功能上有许多相似之处,但主要区别在于它们的用途和数据处理方式,ConfigMap和Secret的数据都是存储在Kubernetes的etcd中。

ConfigMap

用于存储非敏感的配置数据,如配置信息、环境变量、命令行参数等。数据以键值对的形式存储,数据以明文存储,适合存储不需要保护的配置信息,创建ConfigMap有以下几种方式:

通过yaml配置键值对:

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-config-yaml
data:
  database_url: jdbc:mysql://localhost:3306/mydb
  log_level: INFO

通过命令直接配置:

kubectl create configmap my-config \
  --from-literal=key1=value1 \
  --from-literal=key2=value2

从文件创建:

echo "app.name=MyApp" > app.properties
echo "app.version=1.0" >> app.properties

kubectl create configmap my-config-file \
  --from-file=app.properties

在pod中使用ConfigMap:

  • 直接配置键值对
    env:
    - name: APP_CONFIG_KEY1
      valueFrom:
        configMapKeyRef:
          name: example-config  //configMap对象名称
          key: key1   // configMap中定义的key
  • 通过挂载的方式使用ConfigMap(适用配置数据大的场景):

    // 将配置内容存储为文件
    echo -e "key1=value1\nkey2=value2" > app.properties
    kubectl create configmap example-config --from-file=app.properties
    
    
    // 创建pod并挂载configMap
    apiVersion: v1
    kind: Pod
    metadata:
      name: configmap-example-pod
    spec:
      containers:
      - name: app-container
        image: nginx
        volumeMounts:
        - name: config-volume
          mountPath: /etc/config          # 配置文件挂载路径,将configmap内容挂载到/etc/config路径
      volumes:
      - name: config-volume
        configMap:
          name: example-config           # 引用 ConfigMap
    
    
    
    // 验证pod是否挂载成功
    kubectl exec -it configmap-example-pod -- /bin/bash
    cat /etc/config/app.properties
    
    输出结果:
    key1=value1
    key2=value2

Secret

用于存储敏感数据,如密码、令牌、证书等。数据以键值对的形式存储,并且支持编码和加密,默认以Base64编码存储,以保证安全性。Secret有以下几种创建方式:

用Base64编码数据配置键值对:

apiVersion: v1
kind: Secret
metadata:
  name: example-secret
type: Opaque
data:
  username: dXNlcm5hbWU=  # Base64 编码的 'username'
  password: cGFzc3dvcmQ=  # Base64 编码的 'password'

基于明文创建(k8s会默认用Base64编码):

kubectl create secret generic db-user-pass \
    --from-literal=username=admin \
    --from-literal=password='S!B\*d$zDsb='

挂载文件:

echo "my-secret-username" > username.txt
echo "my-secret-password" > password.txt
kubectl create secret generic example-secret --from-file=username.txt --from-file=password.txt

//输出结果
apiVersion: v1
kind: Secret
metadata:
  name: example-secret
data:
  username.txt: bXktc2VjcmV0LXVzZXJuYW1l
  password.txt: bXktc2VjcmV0LXBhc3N3b3Jk

pod中使用secret:

  • 直接应用键值对
    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-with-secret-env
    spec:
      containers:
      - name: my-container
        image: nginx
        env:
        - name: USERNAME
          valueFrom:
            secretKeyRef:
              name: my-secret   //secret对象名称
              key: username   //secret对象定义的key
        - name: PASSWORD
          valueFrom:
            secretKeyRef:
              name: my-secret
              key: password
  • 挂载文件
    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-with-secret-volume
    spec:
      containers:
      - name: my-container
        image: nginx
        volumeMounts:
        - name: secret-volume
          mountPath: "/etc/secret"  //将my-secret对象挂载到容器的指定路径下
          readOnly: true
      volumes:
      - name: secret-volume
        secret:
          secretName: my-secret

配置对比

ConfigMap和Secret都是kubernetes内置的资源配置对象,对应不同的使用场景,也有差别。

数据存储形式

特性ConfigMapSecret
数据类型明文存储Base64编码存储
数据加密支持不支持支持加密
典型用途配置文件、环境变量等非敏感数据密码、API密钥

数据访问形式

访问方式ConfigMapSecret
作为环境变量挂载支持支持
作为文件挂载支持支持
直接在Pod中引用支持支持(以Base64解码形式提供给容器)

安全性

特性ConfigMapSecret
存储安全性明文存储,无加密保护存储支持加密
RBAC权限控制支持支持
默认保护机制无特殊保护机制受集群安全组件限制,防止非授权访问
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值