secret和configmap
一、secret1、什么是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]