secret
ConfigMap 和 secret
Pod中容器提供配置信息
配置中心
Pod加载ConfigMap 资源配置信息两种格式
1、env
2、存储卷 pod.spec.volumes.configMap
其中configMap 和 Pod 同属于名称空间资源,所以两者要在同一名称空间。如果Pod不支持自动重载,则手动进行重载,则手动进行重载
创建configMap
1、命令行
--from-literal 直接给定键值
--from-file 从文件中加载配置文件,如果不指定键名,则文件名是键名
例:我们下载一个容器mysql,里面有许多环境变量MYSQL_ROOT_PASSWORD例我们configMap和secret里配置,configMap和secret是相同资源,唯一不同是secret是被base64编码之后存放的
2、配置清单
创建secret
kubectl create secret -h
三种类型:
tls: 把ssl中的证书和私钥打包至secret中,由于证书和私钥本身是base64编码,需要一定格式。而里面的证书名字一定为tls.crt,私钥名字 tls.key
generic: 非tls加密类型,如MySQL密码,和Redis密码
docker-registry: 当容器仓库为私有时,让kubelet在拉容器能够自动认证,拉取镜像
kubectl explain pods.spec.imagePullSecrets
kubectl explain pods.spec.serviceAccountName
serviceAccountName: 这个Pod为客户端,连接别人服务的账号
Pod在拉取镜像,使用私有仓库的两种方法。无论使用哪种方法,都要用到secret的docker-registry方法
以MySQL容器为示例
kubectl create secret generic -h
kubectl create secret generic mysql-root-password -n config --from-literal=password=magedu
kubectl get secert mysql-root-password -n config -o yaml
注:如果手动编写secret清单,一定要把value变成base64编码之后放进去
[root@k8s-master basic]# cat mysql-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: mysql
namespace: config
spec:
containers:
- name: mysql
image: mysql:5.6
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
key: password
name: mysql-root-password
kubectl apply -f mysql-pod.yaml
kubectl exec -it mysql -n config -- /bin/bash
mysql -uroot -pmagedu
printenv
如果我们tomcat要访问MySQL,我们要访问MySQL前面的service的名字,service的名字一般格式service的名字.空间名字.默认后缀
kubectl explain pods.spec.volumes.secret
secretName: secret资源的名称
items:并且把哪些key映射进来
kubectl explain pods.spec.volumes.secret.items
key: 键名
mode:文件权限
path:文件路径
以上储存卷是引用的secret
tls
kubectl create secret tls -h
--cert 证书路径,统一映射成tls.crt
--key 私钥文件路径,统一映射成tls.key
生成私钥
openssl genrsa -out myapp.key 2048
生成自签证书
openssl req -new -x509 -key ./myapp.key -out ./myapp.crt -subj /C=CN/ST=BeiJing/L=Bejing/O=Ops/CN=www.ilinux.io -days 3650
kubectl create secret tls mysql-cert --cert=./myapp.crt --key=./myapp.key -n config
kubectl get secret mysql-cert -n config -o yaml
引用时ingress自动完成,我们可以通过环境变量或者挂载卷
tls 调用时是创建连接时调用
例 Ingress 的yaml(此东西)
apiVersion: extensions/v1beat1
kind: Ingress
metadata:
name: myapp-tls
namespace: myns
annotaions:
kubectl.io/ingress.class: "Nginx"
spec:
tls:
- hosts:
- www.ilinux.io
secretName: www.ilinux.io
http:
paths:
- path: /
backend:
serviceName: myapp
servicePort: 80
此类型为Ingress,kubectl会根据清单自动创建Ingress规则
Pod 基于存储卷方式引用tls
[root@k8s-master basic]# cat myapp-pod-tls.yaml
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod-secret
namespace: config
spec:
containers:
- name: myapp
image: ikubernetes/myapp:v1
volumeMounts:
- name: tls
mountPath: /etc/nginx/certs
volumes:
- name: tls
secret:
secretName: mysql-cert
items:
- key: tls.crt
path: myapp.crt
- key: tls.key
path: myapp.key
kubectl exec -it myapp-pod-secret /bin/sh
docker-registry
kubectl crate secret docker-registry -h
在Pod中引用仓库
网友评论