学校网站平台建设方案,怎么做网站调查表,做设计在哪个网站上找高清图片,互联网广告行业一、Secret的资源配置
1.1 Secret配置的相关说明
Secret 是用来保存密码、token、密钥等敏感数据的 k8s 资源#xff0c;这类数据虽然也可以存放在 Pod 或者镜像中#xff0c;但是放在 Secret 中是为了更方便的控制如何使用数据#xff0c;并减少暴露的风险。
Secret 有…一、Secret的资源配置
1.1 Secret配置的相关说明
Secret 是用来保存密码、token、密钥等敏感数据的 k8s 资源这类数据虽然也可以存放在 Pod 或者镜像中但是放在 Secret 中是为了更方便的控制如何使用数据并减少暴露的风险。
Secret 有三种类型 ●kubernetes.io/service-account-token由 Kubernetes 自动创建用来访问 APIServer 的 SecretPod 会默认使用这个 Secret 与 APIServer 通信 并且会自动挂载到 Pod 的 /run/secrets/kubernetes.io/serviceaccount 目录中; ●Opaque base64 编码格式的 Secret用来存储用户自定义的密码、密钥等默认的 Secret 类型; ●kubernetes.io/dockerconfigjson 用来存储私有 docker registry 的认证信息。
Pod 需要先引用才能使用某个 secretPod 有 3 种方式来使用 secret ●作为挂载到一个或多个容器上的卷 中的文件。 ●作为容器的环境变量。 ●由 kubelet 在为 Pod 拉取镜像时使用。
应用场景Secrets | KubernetesA Secret is an object that contains a small amount of sensitive data such as a password, a token, or a key. Such information might otherwise be put in a Pod specification or in a container image. Using a Secret means that you dont need to include confidential data in your application code.Because Secrets can be created independently of the Pods that use them, there is less risk of the Secret (and its data) being exposed during the workflow of creating, viewing, and editing Pods.https://kubernetes.io/docs/concepts/configuration/secret/ 1.2 陈述式创建Secret配置 Secret 的创建是根据文件中保存到相应信息进行。例如我们要通过一个用户名文件和密码文件来创建具体的Secret资源配置。
#首先准备好相对应的用户和密码文件
#echo 中 “-n” 选项为不换行
echo -n zhangsanusername.txt
echo -n abc1234passwd.txt #进行陈述创建secret配置kubectl create secret generic mysecret --from-fileusername.txt --from-filepassword.txt kubectl describe secrets mysecret 1.3 声明式base64编码创建Secret
echo zhangsan|base64
echo abc1234|base64 #对已存在的secret资源进行模板导入yaml文件
kubectl get secrets mysecret -o yaml secrets-demo.yaml
#对模板进行修改编辑
vim secrets-demo.yaml apiVersion: v1
kind: Secret
metadata:name: mysecret1namespace: default
type: Opaque
data:username: emhhbmdzYW4Kpasswd: YWJjMTIzNAokubectl apply -f secrets-demo.yaml 1.4 将secret以volume形式挂载到pod中
#创建一个pod模板对其进行修改编辑
kubectl run nginx --imagenginx:1.14 --dry-runclient -o yaml secret-test.yamlvim scret-test.yamlapiVersion: v1
kind: Pod
metadata:name: mypod
spec:containers:- image: nginx:1.14name: nginxvolumeMounts:- name: secretsmountPath: /opt/secretsreadOnly: truevolumes:- name: secretssecret:secretName: mysecret1kubectl creat -f scret-test.yaml 1.5 将Secret导入到pod中充当环境变量 #复制上一个模板进行修改编辑
cp secret-test.yaml secret-env.yaml#进行编辑修改
vim secret-env.yamlapiVersion: v1
kind: Pod
metadata:name: mypod
spec:containers:- image: nginx:1.14name: nginxenv:- name: TEST_USERvalueFrom:secretKeyRef:name: mysecret1key: username- name: TEST_PASSWDvalueFrom:secretKeyRef:name: mysecret1key: passwdenvFrom:- secretRef:name: mysecret1kubectl create -f secret-env.yaml 1.6 实战运用使用secret配置免密交互拉取habor私有仓库镜像 我们在搭建好docker的私有仓库后在使用私有仓库时需要通过docker login指令来登录到私有仓库中。但同时在使用的过程中也会把habor仓库的用户名和密码暴露在命令行中存在一定的安全隐患。k8s中的secret配置的运用能够实现并且规避这一问题的存在
进行私有仓库的secret资源创建
#私有仓库的secret配置
kubectl create secret docker-registry myharbor --docker-server192.168.73.108 --docker-usernameadmin --docker-passwordHarbor12345 --docker-emailadminqq.com
引用secret资源拉取私有仓库镜像创建pod
vim harbor-test.yamlapiVersion: v1
kind: Pod
metadata:name: harbor-pod
spec:nodeName: node02imagePullSecrets:- name: myharborcontainers:- image: 192.168.73.108/test/nginx-test:v1name: harbor-poddnsPolicy: ClusterFirstrestartPolicy: Always
注意登录harbor仓库的默认配置为https所以我们要在配置上修改所有node节点如果只是测试可以在pod中指定node节点修改一个node即可
二、ConfigMap资源配置
与Secret类似区别在于ConfigMap保存的是不需要加密配置的信息。 ConfigMap 功能在 Kubernetes1.2 版本中引入许多应用程序会从配置文件、命令行参数或环境变量中读取配置信息。ConfigMap API 给我们提供了向容器中注入配置信息的机制ConfigMap 可以被用来保存单个属性也可以用来保存整个配置文件或者JSON二进制大对象。 应用场景应用配置
2.1 使用目录来创建configMap资源 创建一个目录并且在一个目录中填写两个文件
mkdir /opt/configmap/vim /opt/configmap/game.config
enemy.typesaliens,monsters
player.maximum-lives5 vim /opt/configmap/ui.config
color.goodpurple
color.badyellow
allow.textmodetruels /opt/configmap/ kubectl create configmap game-config --from-file/opt/cm/
//--from-file 指定在目录下的所有文件都会被用在 ConfigMap 里面创建一个键值对键的名字就是文件名值就是文件的内容 2.2 使用文件创建configMap资源
#只要指定为一个文件就可以从单个文件中创建 ConfigMap
--from-file 这个参数可以使用多次即可以使用两次分别指定上个实例中的那两个配置文件效果就跟指定整个目录是一样的
kubectl create configmap game-config2 --from-file/opt/cm/game.config --from-file/opt/cm/ui.config 2.3 直接使用参数创建confidenceMap资源
#使用文字值创建利用 --from-literal 参数传递配置信息该参数可以使用多次kubectl create configmap special-config --from-literalnamezhangsan --from-literalsexman 2.4 pod利用configMap资源
1使用 ConfigMap 来替代环境变量
vim env.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: special-confignamespace: default
data:special.how: veryspecial.type: good
---
apiVersion: v1
kind: ConfigMap
metadata:name: env-confignamespace: default
data:log_level: INFOkubectl create -f env.yaml 2创建pod并且引用configMap资源
vim test-pod.yaml
apiVersion: v1
kind: Pod
metadata:name: test-pod
spec:containers:- name: busyboximage: busybox:1.28.4command: [ /bin/sh, -c, env ]env:- name: SPECIAL_HOW_KEYvalueFrom:configMapKeyRef:name: special-configkey: special.how- name: SPECIAL_TYPE_KEYvalueFrom:configMapKeyRef:name: special-configkey: special.typeenvFrom:- configMapRef:name: env-configrestartPolicy: Neverkubectl create -f test-pod.yamlkubectl get pods 2.5 使用 ConfigMap 设置命令行参数
vim test-pod2.yaml
apiVersion: v1
kind: Pod
metadata:name: test-pod2
spec:containers:- name: busyboximage: busybox:1.28.4command: - /bin/sh- -c- echo $(SPECIAL_HOW_KEY) $(SPECIAL_TYPE_KEY)env:- name: SPECIAL_HOW_KEYvalueFrom:configMapKeyRef:name: special-configkey: special.how- name: SPECIAL_TYPE_KEYvalueFrom:configMapKeyRef:name: special-configkey: special.typeenvFrom:- configMapRef:name: env-configrestartPolicy: Neverkubectl create -f test-pod2.yaml 2.6 通过数据卷插件使用ConfigMap
在数据卷里面使用 ConfigMap就是将文件填入数据卷在这个文件中键就是文件名键值就是文件内容
vim test-pod3.yaml
apiVersion: v1
kind: Pod
metadata:name: test-pod3
spec:containers:- name: busyboximage: busybox:1.28.4command: [ /bin/sh, -c, sleep 36000 ]volumeMounts:- name: config-volumemountPath: /etc/configvolumes:- name: config-volumeconfigMap:name: special-configrestartPolicy: Neverkubectl create -f test-pod3.yaml kubectl get pods 比如我想通过configMap实现单独挂载pod中的nginx.conf配置
#首先获取nginx.conf 下载或则之前保存都可以
#nginx.conf 在/opt/conf/ 下
kubectl create cm mycm-nginx --from-file/opt/conf
vim pod-demo1.yaml
apiVersion: v1
kind: Pod
metadata:name: mypod
spec:volumes:- name: nginxconfigMap:name: mycm-nginxcontainers:- image: nginx:1.14name: nginxvolumeMounts:- name: nginxmountPath: /etc/nginx/nginx.confsubPath: nginx.conf #subPath 可以实现只覆盖修改该文件而不影响目录kubectl apply -f pod-demo1.yaml
2.7 configMap的热更新
#创建一个cm资源
kubectl create configmap name-config --from-literalnamezhangsan#创建一个pod并且通过volume的方式挂载configMap中的name-config
vim pod-demo1.yaml
apiVersion: v1
kind: Pod
metadata:name: namepod
spec:volumes:- name: update-testconfigMap:name: name-configcontainers:- image: nginx:1.14name: mypodvolumeMounts:- name: update-testmountPath: /opt/name.txt 进行实时更新修改开启另一个终端
kubectl edit cm name-config PS更新 ConfigMap 后 ●使用该 ConfigMap 挂载的 Env 不会同步更新。 ●使用该 ConfigMap 挂载的 Volume 中的数据需要一段时间实测大概10秒才能同步更新。 总结 ConfigMap资源简称cm 用于保存配置文件、环境变量等不需要加密的信息。它可以实现将配置信息与应用程序解耦 创建cm资源 kubectl create cm 资源名称 --from-file文件|目录 --from-literal键名键值 查看cm资源数据 kubectl get -n 命名空间 cm cm资源名称 -o yaml kubectl describe -n 命名空间 cm cm资源名称 使用cm资源 作为存储卷挂载的方式 在Pod资源配置中用spec.volumes字段设置configMap类型的卷 在容器配置中用volumeMounts将卷挂载到容器的指定的目录cm资源数据的键名会作为文件名cm资源数据的键值会作为文件内容支持热更新 在容器配置中用volumeMounts.subPath字段指定文件名实现将卷挂载到容器中指定的文件上不支持热更新 作为容器环境变量的方式不支持热更新 在容器配置中用env.name字段自定义容器的环境变量名用env.valueFrom.configMapKeyRef.key/name字段指定环境变量的值从哪个cm资源的键获取 在容器配置中用envFrom.configMapRef.name字段指定cm资源的名称使得cm资源数据的键名和键值直接作为容器的环境变量名和值 Secret资源 用于保存密码文件、ssl证书/私钥文件、token令牌字符串、镜像私有仓库认证信息等需要加密的敏感信息 Secrets的主要目的是将敏感数据与应用程序代码分离并提供一种安全的方式来存储和传递这些敏感数据给容器化的应用程序。它们以加密的形式保存并且只能在需要时才能被解密和使用。 Secret的4种类型 Opaque默认的Secret资源类型可以通过选项引用文件、目录、键值对的方式创建Secret资源并且资源数据的键值会被自动转换为base64编码格式加密 kubernetes.io/service-account-token当创建serviceaccout账户资源后K8S会自动创建同名的Secert资源用于Pod访问apiserver时会使用此Secret卷中的token做认证 kubernetes.io/dockerconfigjson用于存储K8S从Harbor等镜像私有仓库拉取镜像时做认证的信息 kubernetes.io/tls用于存储tls/ssl证书和私钥文件的信息 创建Secret资源 kubectl create secret generic 资源名称 --from-file文件|目录 --from-literal键名键值 kubectl create secret docker-registry 资源名称 --docker-server私有仓库URL路径 --docker-username仓库用户名 --docker-password用户密码 --docker-email邮箱地址 kubectl create secret tls 资源名称 --cert证书文件 --key私钥文件 查看Secret资源键值会以base64编码格式加密显示 kubectl get -n 命名空间 secret Secret资源名称 -o yaml kubectl describe -n 命名空间 secret Secret资源名称 使用Secret资源 作为存储卷挂载的方式 在Pod资源配置中用spec.volumes字段设置secret类型的卷 在容器配置中用volumeMounts将卷挂载到容器的指定的目录Secret资源数据的键名会作为文件名Secret资源数据的键值会作为文件内容 作为容器环境变量的方式 在容器配置中用env.name字段自定义容器的环境变量名用env.valueFrom.secretKeyRef.key/name字段指定环境变量的值从哪个Secret资源的键获取 在容器配置中用envFrom.secretRef.name字段指定Secret资源的名称使得Secret资源数据的键名和键值直接作为容器的环境变量名和值 Pod配置从私有仓库拉取镜像 在Pod资源配置中用spec.imagePullSecrets.name字段指定kubernetes.io/dockerconfigjson类型的Secret资源名称