k8s入门到实战(八)—— Secret概述

2024-03-31 1416阅读

Secret

什么是 secret

在 k8s 中,Secret 是一种用于存储敏感数据的对象,如密码、API 密钥、证书等。Secret 的设计目的是为了安全地存储和传输敏感信息。

k8s入门到实战(八)—— Secret概述
(图片来源网络,侵删)

Secret 可以以多种形式存储敏感数据,包括 Base64 编码、字符串文本、docker 镜像等。Secret 的数据可以在 pod 中以环境变量、命令行参数或挂载文件的方式使用。

Secret 可以通过 kubectl 命令行工具、YAML 文件或 API 进行创建和管理。可以在命名空间级别或集群级别创建 Secret,并将其应用于特定的 Pod、Deployment、StatefulSet 等对象。

与 ConfigMap 类似,Secret 也是以键值对的形式存储数据的。但不同的是,Secret 的数据是加密的,并且在传输和存储过程中会进行加密和解密操作,以确保敏感信息的安全性。

通过使用 Secret,可以实现以下的优势:

  • 安全存储敏感信息:Secret 可以加密存储敏感数据,确保敏感信息在传输和存储过程中的安全性。
  • 解耦敏感数据和应用程序:将敏感数据从应用程序中分离,使得应用程序更加灵活和可配置。
  • 集中化管理敏感数据:通过创建和管理 Secret 对象,可以集中管理应用程序的敏感数据,而不需要将其硬编码到应用程序中。

    总之,Secret 是 k8s 中用于存储和管理敏感数据的一种机制,通过加密和解密操作,确保敏感信息的安全性,并将敏感数据与应用程序分离,提高了应用程序的灵活性和安全性。

    secret 示例

    我们这里使用 Base64 编码测试 secret

    注意:Base64 只是一种编码,不含密钥的,并不安全。默认情况下,k8s Secret 未加密地存储在 API 服务器的底层数据存储(etcd)中。 任何拥有 API 访问权限的人都可以检索或修改 Secret,任何有权访问 etcd 的人也可以。 此外,任何有权限在命名空间中创建 Pod 的人都可以使用该访问权限读取该命名空间中的任何 Secret,只防君子,不防小人;

    1. 查看 “123456” 的 base64 编码
    [root@k8s-master ~]# echo -n '123456' | base64
    MTIzNDU2
    [root@k8s-master ~]# echo 'MTIzNDU2' | base64 --decode
    123456
    
    1. 编辑 yaml 文件mysql-server.yaml进行测试
    # 创建pv
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: mysql-pv
    spec:
      capacity:
        storage: 3Gi
      accessModes:
        - ReadWriteMany
      storageClassName: nfs
      nfs:
        path: /nfs/data/mysql
        server: 192.168.0.1
    ---
    # 创建pvc
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: mysql-pvc
    spec:
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 1Gi
      storageClassName: nfs
    ---
    # 创建 configmap
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: mysql-config
    data:
      mysql.cnf: |
        [mysqld]
        port=3306
        character-set-server=utf8mb4
    ---
    # 创建一个mysql服务
    apiVersion: v1
    kind: Pod
    metadata:
      name: mysql-pod
    spec:
      containers:
        - name: mysql
          image: mysql:5.7
          env:
            - name: MYSQL_ROOT_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: mysql-password
                  key: PASSWORD
          ports:
            - containerPort: 3306
          volumeMounts:
            - mountPath: /var/lib/mysql
              name: data-volume
            - mountPath: /etc/mysql/conf.d
              name: conf-volume
      volumes:
        - name: conf-volume
          configMap:
            name: mysql-config
        - name: data-volume
          persistentVolumeClaim:
            claimName: mysql-pvc
    ---
    # 创建secret对象,在一些敏感位置使用
    apiVersion: v1
    kind: Secret
    metadata:
      name: mysql-password
    data:
      PASSWORD: MTIzNDU2
    
    1. 根据 yaml 文件创建 pod,测试密码 “123456” 能否登录
    [root@k8s-master k8s]# kubectl apply -f mysql-server.yaml 
    persistentvolume/mysql-pv created
    persistentvolumeclaim/mysql-pvc created
    configmap/mysql-config created
    pod/mysql-pod created
    secret/mysql-password created
    [root@k8s-master k8s]# kubectl exec -it mysql-pod /bin/bash
    kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
    root@mysql-pod:/# mysql -uroot -p123456
    mysql: [Warning] Using a password on the command line interface can be insecure.
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 2
    Server version: 5.7.36 MySQL Community Server (GPL)
    Copyright (c) 2000, 2021, Oracle and/or its affiliates.
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    mysql> 
    

    能够正常登录,测试成功

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]