1:Secret
Secret 类似于 ConfigMap 但专门用于保存机密数据。
1.1:Secret 的类型
创建 Secret 时,你可以使用 Secret 资源的 type 字段,或者与其等价的 kubectl 命令行参数(如果有的话)为其设置类型。 Secret 类型有助于对 Secret 数据进行编程处理。
Kubernetes 提供若干种内置的类型,用于一些常见的使用场景。 针对这些类型,Kubernetes 所执行的合法性检查操作以及对其所实施的限制各不相同。
内置类型
用法
Opaque
用户定义的任意数据
kubernetes.io/service-account-token
服务账号令牌
~/.dockercfg 文件的序列化形式
kubernetes.io/dockerconfigjson
~/.docker/config.json 文件的序列化形式
用于基本身份认证的凭据
用于 SSH 身份认证的凭据
用于 TLS 客户端或者服务器端的数据
启动引导令牌数据
通过为 Secret 对象的 type 字段设置一个非空的字符串值,你也可以定义并使用自己 Secret 类型(如果 type 值为空字符串,则被视为 Opaque 类型)。
1.1.1:generic 类型
1:使用基本字符串 命令行创建
特殊字符(例如 KaTeX parse error: Undefined control sequence: \、 at position 2: 、\̲、̲*、= 和 !)会被你的 Sh...zDsb=' --dry-run=client -oyaml
等同于 yaml
apiVersion: v1
data:
password: YWJjZEAxMjMh
username: cm9vdA==
kind: Secret
metadata:
creationTimestamp: null
name: db-secret
解码
echo "cm9vdA==" | base64 -d
2:使用文件来创建secret
默认密钥名称是文件名
kubectl create secret generic db-user-pass
--from-file=./username.txt
--from-file=./password.txt
使用 --from-file=[key=]source 来设置密钥名称
kubectl create secret generic db-user-pass-02
--from-file=uname=./username.txt
--from-file=pwd=./password.txt3:在pod中使用,并以环境变量的形式使用
修改secret pod环境变量引用的方式不会被自动更新
secret保存在集群的etcd里面
apiVersion: v1
kind: Pod
metadata:
name: "pod-secret"
namespace: default
labels:
app: "pod-secret"
spec:
containers:
- name: pod-secret
image: "swr.cn-north-4.myhuaweicloud.com/ddn-k8s/registry.k8s.io/e2e-test-images/busybox:1.29-4"
command: ["/bin/sh","-c","sleep 3600"] ## echo $My_USR
resources:
limits:
cpu: 10m ### 1核代表1000m
requests:
cpu: 5m
env:- name: MY_USR ### 容器里的环境变量名字
valueFrom:
secretKeyRef: ## secret的内容
name: db-secret #指定secret名字
key: username ### 自动base64解码 - name: POD_NAME
valueFrom:
fieldRef: ## 属性引用
fieldPath: metadata.name ## 取出资源对象信息 - name: POD_LIMIT_MEM
valueFrom:
resourceFieldRef:
containerName: pod-secret ## 取出指定容器的相关资源值
resource: limits.cpu4:secret用卷挂载 (改文件,里面信息会更新)
- name: MY_USR ### 容器里的环境变量名字
secret保存在集群的etcd里面
apiVersion: v1
kind: Pod
metadata:
name: "pod-secret"
namespace: default
labels:
app: "pod-secret"
spec:
containers:
- name: pod-secret
image: "swr.cn-north-4.myhuaweicloud.com/ddn-k8s/registry.k8s.io/e2e-test-images/busybox:1.29-4"
command: ["/bin/sh","-c","sleep 3600"]
volumeMounts:- name: test
mountPath: "/app/lqf"
readOnly: true
volumes:
- name: test
- name: test
secret:
defaultMode: 0777 # 权限
secretName: db-secret
items: ## 可选,指定那个配置挂载出来- key : password
path : password.test ## 在容器里面叫什么名字
- key : password
-
configmap
apiVersion: v1
kind: Pod
metadata:
name: configmap-demo-pod
spec:
containers:-
name: demo
image: alpine
command: ["sleep", "3600"]
env:定义环境变量
- name: PLAYER_INITIAL_LIVES # 请注意这里和 ConfigMap 中的键名是不一样的
valueFrom:
configMapKeyRef:
name: game-demo # 这个值来自 ConfigMap
key: player_initial_lives # 需要取值的键 - name: UI_PROPERTIES_FILE_NAME
valueFrom:
configMapKeyRef:
name: game-demo
key: ui_properties_file_name
volumeMounts: - name: config
mountPath: "/config"
readOnly: true
volumes:
- name: PLAYER_INITIAL_LIVES # 请注意这里和 ConfigMap 中的键名是不一样的
你可以在 Pod 级别设置卷,然后将其挂载到 Pod 内的容器中
-
name: config
configMap:提供你想要挂载的 ConfigMap 的名字
name: game-demo
来自 ConfigMap 的一组键,将被创建为文件
items:
- key: "game.properties"
path: "game.properties" - key: "user-interface.properties"
path: "user-interface.properties"
- key: "game.properties"
-