晦险忿 发表于 2025-8-2 14:58:37

secret和configmap

一、secret

1、什么是secret?


[*]这个类型主要就是存储密码或者一些隐私一些内容
[*]主要就是保存这些东西的
[*]值都是base64加密的
[*]都是基于命名空间的
2、创建secret方式

1、命令行创建

# kubectl create secret --help
Create a secret using specified subcommand.

Available Commands:
docker-registry   Create a secret for use with a Docker registry
generic         Create a secret from a local file, directory, or literal value # 常用的
tls               Create a TLS secret

Usage:
kubectl create secret

Use "kubectl <command> --help" for more information about a given command.
Use "kubectl options" for a list of global command-line options (applies to all commands).


# kubectl create secret generic --help

# 这些有的是案例的
# kubectl create secret generic --help | grep from
kubectl create secret generic my-secret --from-file=path/to/bar
kubectl create secret generic my-secret --from-file=ssh-privatekey=path/to/id_rsa --from-file=ssh-publickey=path/to/id_rsa.pub
kubectl create secret generic my-secret --from-literal=key1=supersecret --from-literal=key2=topsecret
kubectl create secret generic my-secret --from-file=ssh-privatekey=path/to/id_rsa --from-literal=passphrase=topsecret
# Create a new secret named my-secret from env files
kubectl create secret generic my-secret --from-env-file=path/to/foo.env --from-env-file=path/to/bar.env
    --from-env-file=[]:# 通过环境变量创建
    --from-file=[]:# 通过文件创建
    --from-literal=[]:# 键值对的方式
kubectl create secret generic NAME [--type=string] [--from-file=source] [--from-literal=key1=value1] [--dry-run=server|client|none]


# kubectl create secret generic mysec1 --from-literal=name1=aaa1 --from-literal=name2=bbb2
secret/mysec1 created

# 上面创建了2个数据
# kubectl get secrets
NAME   TYPE   DATA   AGE
mysec1   Opaque   2      3s
# kubectl describe secrets mysec1
Name:         mysec1
Namespace:    default
Labels:       <none>
Annotations:<none>

Type:Opaque# 基于base64密钥进行解密和加密

Data
====
name2:4 bytes# 值默认是加密的
name1:4 bytes

[*]显示加密后的密钥
# kubectl get secrets mysec1 -o yaml
apiVersion: v1
data:
name1: YWFhMQ==
name2: YmJiMg==
kind: Secret
metadata:
creationTimestamp: "2025-08-02T07:00:20Z"
name: mysec1
namespace: default
resourceVersion: "150234"
uid: b89398bb-a512-41bf-9032-31d6e15e2fa0
type: Opaque


# 使用base64进行解密
# echo -nYWFhMQ== | base64 -d
aaa1# 2、文件方式


[*]将内容保存到文件中去
[*]文件名相当于是键,内容是值
# echo redhat > name3
# ls
name3
# cat name3
redhat
# kubectl create secret generic mysec2 --from-file=name33、环境变量方式

cat 1.txt
name1=aaa1

# kubectl create secret generic mysec3 --from-env-file=1.txt
secret/mysec3 created4、通过yaml文件生成

# 通过查看命令帮助
# kubectl explain secret --recursive | less

# cat secret1.yaml
apiVersion: v1
kind: Secret
metadata:
name: mysec4
data:
name1: cXFxCg==3、使用secret方式

1、卷使用secret


[*]将这个secret挂载到容器里面去即可
[*]以卷的方式来挂载这个secret和confgimap的话,适用场景就是一些服务的配置文件
[*]在pod里面存在的方式,文件名就是键
# cat pod1.yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
    run: pod1
name: pod1
spec:
containers:
- image: nginx
    imagePullPolicy: IfNotPresent
    name: pod1
    volumeMounts: # 挂载到这个/mnt目录下
    - name: v1
      mountPath: /mnt
volumes:# 使用secret作为卷
- name: v1
    secret:
      secretName: mysec1

# 将这个密钥写到这个文件里面去了
# 文件名就是这个键,内容就是值

# 在pod里面的存在的方式文件名就是键
# kubectl exec -ti pod1-- ls /mnt
name1name2# nginx的页面来使用卷挂载网站页面2、变量方式使用secret


[*]mysql运行时,需要环境变量,因此上面的文件不方便
# cat pod1.yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
    run: pod1
name: pod1
spec:
containers:
- image: nginx
    imagePullPolicy: IfNotPresent
    name: pod1
    env:
    - name: env1# 环境变量名
      valueFrom: # 这个值来自于这个secret
      secretKeyRef:
          name: mysec1
          key: name1# 使用的键是这个name1,env1的值使用就是name1对应的值

# 进入容器使用环境变量
# kubectl exec -ti pod1 -- /bin/bash
root@pod1:/# echo $env1
aaa1

[*]创建一个mysql容器
# cat mysql.yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
    run: mysql1
name: mysql1
spec:
containers:
- image: mysql
    imagePullPolicy: IfNotPresent
    name: mysql1
    ports:
    - containerPort: 3306
    env:
    - name: MYSQLROOT_PASSWORD # 环境变量键
      valueFrom:
      secretKeyRef:
          name: mysec1
          key: name1# 使用的值就是name1键对应的值
    resources: {}
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}

[*]远程登录mysql,密码是aaa1
# kubectl get pod -o wide
NAME   READY   STATUS    RESTARTS   AGE   IP            NODE      NOMINATED NODE   READINESS GATES
mysql1   1/1   Running   0          84s   10.244.82.180   k-node1   <none>         <none>
pod1   1/1   Running   0          16m   10.244.82.172   k-node1   <none>         <none>

# 语法,-u 可以要空格可以不需要空格
# 但是呢,这个密码的话不能有空格

# mysql -uroot -paaa1 -h 10.244.82.180
Welcome to the MariaDB monitor.Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 9.4.0 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)]> 二、configmap

1、什么是configmap


[*]主要就是保存配置文件用的
[*]明文的方式保存
[*]跟上面secret的操作一模一样
2、创建configmap方式

1、命令行创建

# 查看命令行帮助
# kubectl create configmap --help | grep -i from
kubectl create configmap my-config --from-file=path/to/bar
kubectl create configmap my-config --from-file=key1=/path/to/bar/file1.txt --from-file=key2=/path/to/bar/file2.txt
kubectl create configmap my-config --from-literal=key1=config1 --from-literal=key2=config2
# Create a new config map named my-config from the key=value pairs in the file
kubectl create configmap my-config --from-file=path/to/bar
# Create a new config map named my-config from an env file
kubectl create configmap my-config --from-env-file=path/to/foo.env --from-env-file=path/to/bar.env
    --from-env-file=[]:
    --from-file=[]:
    --from-literal=[]:
kubectl create configmap NAME [--from-file=source] [--from-literal=key1=value1] [--dry-run=server|client|none]

# kubectl create configmap cm1 --from-literal=name1=qqq
configmap/cm1 created
# kubc^C
# kubectl get cm
NAME               DATA   AGE
cm1                1      4s
kube-root-ca.crt   1      13d
# kubectl describe cm cm1
Name:         cm1
Namespace:    default
Labels:       <none>
Annotations:<none>

Data
====
name1: # 键
----
qqq# 文件的内容

BinaryData
====

Events:<none>2、文件创建


[*]文件名相当于是键,值是文件里面的内容
# kubectl create configmap cm2--from-file=name4
configmap/cm2 created
# kubectl describe cm cm2
Name:         cm2
Namespace:    default
Labels:       <none>
Annotations:<none>

Data
====
name4:# 键
----
qqq# 文件的内容


BinaryData
====

Events:<none>3、环境变量和yaml创建

# kubectl create configmap cm3 --from-env-file=2.txt
configmap/cm3 created
# kubectl get cmck^C
# kubectl describe cm cm3
Name:         cm3
Namespace:    default
Labels:       <none>
Annotations:<none>

Data
====
name1:
----
qqq

BinaryData
====

Events:<none># kubectl apply -f cm4.yaml
configmap/cm4 created
# kubectl describe configmaps cm4
Name:         cm4
Namespace:    default
Labels:       <none>
Annotations:<none>

Data
====
name1:
----
qqq

BinaryData
====

Events:<none>3、使用configmap方式

1、通过卷的方式使用

# cat pod2.yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
    run: pod2
name: pod2
spec:
containers:
- image: nginx
    imagePullPolicy: IfNotPresent
    name: pod2
    volumeMounts:
    - name: c1
      mountPath: /mnt
    resources: {}
volumes:
- name: c1
    configMap:
      name: cm4
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}


# 卷挂载的话,以键是文件的存在形式存在的
# kubectl exec -ti pod2-- cat/mnt/name1
qqq# 2、通过变量的方式使用

# cat pod2.yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
    run: pod2
name: pod2
spec:
containers:
- image: nginx
    imagePullPolicy: IfNotPresent
    name: pod2
    resources: {}
    env:
    - name: env1 # 环境变量键
      valueFrom:
      configMapKeyRef: # 使用的值是configmap
          name: cm4
          key: name1 # 值是name1对应的值
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}

# kubectl exec -ti pod2 -- /bin/bash
root@pod2:/# echo $env1
qqq
root@pod2:/# 三、实验

1、configmap配置nginx网页目录


[*]data字段数据写法

来源:豆瓜网用户自行投稿发布,如果侵权,请联系站长删除
页: [1]
查看完整版本: secret和configmap