secret

作者: 麟之趾a | 来源:发表于2020-09-24 13:30 被阅读0次

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中引用仓库

相关文章

网友评论

      本文标题:secret

      本文链接:https://www.haomeiwen.com/subject/fnkpektx.html