Secret

Secret

在 Kubernetes 中,Secret 是一种用于存储敏感信息的资源,比如密码、OAuth 令牌、SSH 密钥等。Secret 允许你以安全的方式将这些信息传递给 Pod,而不是硬编码在镜像或配置文件中。

配置管理中心:configMap、Secret

Secret 的类型
创建 Secret 时,你可以使用 Secret 资源的 type 字段,或者与其等价的 kubectl 命令行参数(如果有的话)为其设置类型。 Secret 类型有助于对 Secret 数据进行编程处理。

Kubernetes 提供若干种内置的类型,用于一些常见的使用场景。 针对这些类型,Kubernetes 所执行的合法性检查操作以及对其所实施的限制各不相同。

内置类型  用法
Opaque  用户定义的任意数据
kubernetes.io/service-account-token 服务账号令牌
kubernetes.io/dockercfg ~/.dockercfg 文件的序列化形式
kubernetes.io/dockerconfigjson  ~/.docker/config.json 文件的序列化形式
kubernetes.io/basic-auth  用于基本身份认证的凭据
kubernetes.io/ssh-auth  用于 SSH 身份认证的凭据
kubernetes.io/tls 用于 TLS 客户端或者服务器端的数据
bootstrap.kubernetes.io/token 启动引导令牌数据

安全性
加密存储:Kubernetes 支持在 etcd 中加密 Secret。
访问控制:使用 RBAC(角色基础访问控制)来限制对 Secret 的访问。
Secret 是 Kubernetes 中用于处理敏感数据的关键资源,它提供了安全和灵活的方式来管理这些数据。

创建 Secret

Secret 可以通过多种方式创建,包括 YAML 文件、kubectl 命令或从文件中加载。以下是几种常见的创建方式:

  1. 从文件创建 Secret

    kubectl create secret generic my-secret --from-file=/path/to/secret/file
    
  2. 从字面量值创建 Secret

    kubectl create secret generic my-secret --from-literal=username=myuser --from-literal=password=mypassword
    
  3. 使用 YAML 文件定义 Secret

    apiVersion: v1
    kind: Secret
    metadata:
      name: my-secret
    type: Opaque
    data:
      username: dXNlcg==  # base64 编码后的 "user"
      password: cGFzc3dvcmQ=  # base64 编码后的 "password"
    
Sectec如何加密: base64
## 编码
echo -n '123456' | base64  
## 解码
echo "a3kzNg==" | base64 -d

## yaml文件方式创建secret:yaml文件中的数据,必须要用base64加密。
## 命令的方式创建secret:  
不需要BASE64提前加密;
kubectl create secret generic backend-user --from-literal=backend-username='backend-admin'

示例:

1.安全分发凭据

## 用户名和密码:   ky36   123456
  echo -n 'ky36' | base64     ------ a3kzNg==
  echo -n '123456' | base64   ------ MTIzNDU2
  
apiVersion: v1
kind: Pod
metadata:
  name: secret-test-pod
spec:
  containers:
    - name: test-container
      image: harbor.hiuiu.com/nginx/nginx:1.21.5
      volumeMounts:
        - name: secret-volume
          mountPath: /etc/secret-volume
          readOnly: true
  volumes:
    - name: secret-volume
      secret:
        secretName: test-secret
---
apiVersion: v1
kind: Secret
metadata:
  name: test-secret
data:
  username: a3kzNg==
  password: MTIzNDU2
  class: ky36
  
kubectl exec -it secret-test-pod  -- bash
  

请添加图片描述

2.Secret 中的数据定义容器变量ENV

kubectl create secret generic backend-user --from-literal=backend-username='backend-admin'
apiVersion: v1
kind: Pod
metadata:
  name: env-single-secret
spec:
  containers:
  - name: envars-test-container
    image: harbor.hiuiu.com/nginx/nginx:1.21.5
    env:
    - name: SECRET_USERNAME
      valueFrom:
        secretKeyRef:
          name: backend-user
          key: backend-username
kubectl exec -it env-single-secret -- bash -c 'echo $SECRET_USERNAME'

3.secret实现连接远程mysql

#数据库:
#####################总结#####################
#在集群外部,centos7系统安装mysql作为服务端。之前写的脚本,拖来直接运行
[root@Node5 ~]#:bash install_mysql.sh
#进入数据库之后
#密码策略,改密码,添加两条:
set global validate_password_policy=0;
set global validate_password_length=1;
 
#将密码改成"abc123"
alter user root@'localhost' identified by 'abc123';
ctrl + D  #退出,可以测试一下:mysql -uroot -pabc123,登录进去,ctrl+D退出登录。
#进去创建一个普通用户。允许任何主机登录。
[root@Node5 ~]#:mysql -uroot -pabc123
#创建一个普通用户。
mysql> create user user@"%" identified by "123456";
#查看主机和用户。
mysql> select host,user from mysql.user;
| %         | user          |

4 rows in set (0.00 sec)
#赋权。
mysql> grant all privileges on *.* to user@'%';
Query OK, 0 rows affected (0.00 sec)
mysql> exit
Bye
#登录普通用户。由于赋权了,可以对数据库操作了。
[root@Node5 ~]#:mysql -uuser -p123456
mysql> create database ky36;
Query OK, 0 rows affected (0.00 sec)
#查看数据库。ky36
mysql> show databases;
| ky36               |
5 rows in set (0.00 sec)
mysql> exit
Bye
####去集群master上:可以在主上安装mysql:apt install -y mysql-client,测试登录mysql -uuser -p123456 -h 192.168.240.15
#获取用户名和密码的密文。写在yaml文件中。
[root@Node-1 9_02]#:echo -n "user" | base64
dXNlcg==
[root@Node-1 9_02]#:echo -n "123456" | base64
MTIzNDU2
#写两个yaml文件。secret.yaml和pod.yaml
[root@Node-1 9_02]#:cat secret.yaml 
apiVersion: v1
kind: Secret
metadata:
  name: mysql-secret		#secret的名字。
type: Opaque
data:
  mysql-password: MTIzNDU2	#密码密文
  mysql-user: dXNlcg==		#用户名密文
[root@Node-1 9_02]#:cat pod.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: my-app-pod
spec:
  containers:
  - name: my-app-pod
    image: harbor.hiuiu.com/linux_system/centos/centos7:7.9.2009
    env:
    - name: MYSQL_HOST			#变量名,进入容器中的变量。echo $MYSQL_HOST
      value: "192.168.240.15"	#值为主机
    - name: MYSQL_PORT
      value: "3306"
    - name: MYSQL_USER
      valueFrom:
        secretKeyRef:
          name: mysql-secret	#用户在secret中的
          key: mysql-user		#取这个键的值
    - name: MYSQL_PASSWORD
      valueFrom:
        secretKeyRef:
          name: mysql-secret	#密码在secret中
          key: mysql-password	#取这个键的值
    command: ["/bin/bash"]		#在centos中持续运行的命令。
    args: ["-c", "while true; do echo hello; sleep 10; done"]
#运行secret
[root@Node-1 9_02]#:kubectl apply -f secret.yaml 
secret/mysql-secret created
[root@Node-1 9_02]#:kubectl get secret 
NAME           TYPE     DATA   AGE
mysql-secret   Opaque   2      6s
#运行pod
[root@Node-1 9_02]#:kubectl apply -f pod.yaml 
pod/my-app-pod created
[root@Node-1 9_02]#:kubectl get pod 
NAME         READY   STATUS    RESTARTS        AGE
my-app-pod   1/1     Running   0               3s
nginxtest    1/1     Running   25 (121m ago)   5d7h
[root@Node-1 9_02]#:kubectl exec -it my-app-pod bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
#搭建本地yum仓库。
[root@my-app-pod ~]# cd /etc/yum.repos.d/
[root@my-app-pod yum.repos.d]# mkdir bak
[root@my-app-pod yum.repos.d]# mv *.repo bak/
#从centos中,grep -vE "^#|^$" /etc/yum.repos.d/CentOS-Base.repo。把这个源复制到容器的源中。
[root@my-app-pod yum.repos.d]# vi CentOS-Base.repo
[root@my-app-pod yum.repos.d]# yum clean all
[root@my-app-pod yum.repos.d]# yum makecache
#安装数据库
[root@my-app-pod yum.repos.d]# yum install -y mysql
#查看变量
[root@my-app-pod yum.repos.d]# echo $MYSQL_HOST
192.168.240.15
[root@my-app-pod yum.repos.d]# echo $MYSQL_USER
user
[root@my-app-pod yum.repos.d]# echo $MYSQL_PASSWORD
123456
#登录数据库
[root@my-app-pod yum.repos.d]# mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -h$MYSQL_HOST
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 23
Server version: 5.7.44 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| ky36               |		#发现有了我们在服务端创建的数据库ky36。
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

MySQL [(none)]> drop database ky36;		#删除数据库
Query OK, 0 rows affected (0.00 sec)

MySQL [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)
#在centos7服务端查看,也就删除掉了ky36数据库。
[root@Node5 ~]#:mysql -uuser -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 25
Server version: 5.7.44 MySQL Community Server (GPL)

Copyright (c) 2000, 2023, 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> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

mysql> 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值