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