Kubernetes进阶之secret及configmap配置管理

Kubernetes进阶之secret及configmap配置管理

目录:

一 从外部访问应用最佳方式
二 配置管理
三 数据卷与数据持久卷
四 再谈有状态应用部署
五 K8S 安全机制

二、配置管理
Pod使用secret两种方式:
? 变量注入 (就是我们在写yaml的时候直接让它以变量的方式注入进去,注入pod中,去引用这个变量,去做相关的处理)
? 挂载(直接从volume的形式挂载到我们指定的目录下)
Configmap
与Secret类似,区别在于ConfigMap保存的是不需要加密配置信息。
应用场景:应用配置

官方文档使用secret:https://kubernetes.io/docs/concepts/configuration/secret/

可以创建secret主要放一些加密数据,不希望别人看到的,比如用户名密码,保存这样的数据
存储好怎么让用户去访问,可以通过ingress指定一下secret名字,一般情况下创建pod业务容器的话,就需要指定这个secret到哪个地方或者以volume的方式挂载的
加密数据并存放Etcd中,让Pod的容器以挂载Volume方式访问。
应用场景:凭据
创建资源的时候 , YAML 或 JSON 格式 , 然后创建该对象。在包含两个映射 : stringdata 和数据。该数据字段用于存储任意数据 , 用 Base64 编码。在 stringdata 提供 , 并允许您提供秘密数据为未编码的字符串。
例如 , 两个字符串存储到在yaml的使用 , 将他们转换成 BASE64:
这里的变量转换为编码,提示敏感字符,下面的yaml文件没写上去,抱歉

[[email protected] demo]# echo -n ‘root‘ | base64

[[email protected] demo]# echo -n ‘zhaocheng‘ | base64
[[email protected] cert]# vim secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
data:
  username:
  password: 
[[email protected] cert]# kubectl create -f secret.yaml
[[email protected] demo]# vim secret-pod1.yaml
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: nginx
    image: nginx
    env:
      - name: SECRET_USERNAME
        valueFrom:
          secretKeyRef:
            name: mysecret
            key: username
      - name: SECRET_PASSWORD
        valueFrom:
          secretKeyRef:
            name: mysecret
            key: password

[[email protected] demo]# kubectl create -f secret-pod1.yaml
[[email protected] demo]# kubectl get pod
NAME                     READY   STATUS    RESTARTS   AGE
busybox                  1/1     Running   35         4d1h
mypod                    1/1     Running   0          2m27s
nginx-5ddcc6cb74-m8dwr   1/1     Running   0          5h47m
nginx-5ddcc6cb74-rs8b6   1/1     Running   0          4h34m
nginx-5ddcc6cb74-zm7cz   1/1     Running   0          4h34m
[[email protected] demo]# kubectl exec -it mypod sh
ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
echo $SECRET_USERNAME
root
echo $SECRET_PASSWORD
zhaocheng

应用场景:
一般写Dockerfile的时候,或者docker-compose的时候,能自动的去处理这些变量,也就是这个值被k8s进来解码

通过volume的形式来挂载
一般使用volume来把一些证书比如https的证书通过变量的形式传入挂载到目录中

[[email protected] demo]# vim secret-pod2.yaml
apiVersion: v1
kind: Pod
metadata:
  name: mypod2
spec:
  containers:
  - name: nginx
    image: nginx
    volumeMounts:
    - name: foo
      mountPath: "/etc/foo"
      readOnly: true
  volumes:
  - name: foo
    secret:
      secretName: mysecret
[[email protected] demo]# kubectl create -f secret-pod2.yaml
[[email protected] demo]# kubectl get pod
NAME                     READY   STATUS    RESTARTS   AGE
mypod                    1/1     Running   0          6m1s
mypod2                   1/1     Running   0          9s
nginx-5ddcc6cb74-lplxl   1/1     Running   0          43m

[[email protected] demo]# kubectl exec -it mypod2 bash
[email protected]:/# ls /etc/foo/
password  username
[email protected]:/# cat /etc/foo/password
[email protected]:/# cat /etc/foo/username
[email protected]:/#

Configmap
与Secret类似,区别在于ConfigMap保存的是不需要加密配置信息。
应用场景:应用配置
使用configmap来传入变量
官方文档:https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/

[[email protected] demo]# vim configmap1.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: myconfig
  namespace: default
data:
  special.level: info
  special.type: hello

---

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
    - name: busybox
      image: busybox
      command: [ "/bin/sh", "-c", "echo $(LEVEL) $(TYPE)" ]
      env:
        - name: LEVEL
          valueFrom:
            configMapKeyRef:
              name: myconfig
              key: special.level
        - name: TYPE
          valueFrom:
            configMapKeyRef:
              name: myconfig
              key: special.type
  restartPolicy: Never
[[email protected] demo]# kubectl get pod
NAME                     READY   STATUS      RESTARTS   AGE
mypod                    1/1     Running     0          26m
mypod2                   1/1     Running     0          20m
mypod3                   0/1     Completed   0          41s
nginx-5ddcc6cb74-lplxl   1/1     Running     0          63m
[[email protected] demo]# kubectl logs mypod3
info hello

使用redis的一个实例
[[email protected] demo]# vim configmap2.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: redis-config
data:
  redis.properties: |
    redis.host=127.0.0.1
    redis.port=6379
    redis.password=123456

---

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
    - name: busybox
      image: busybox
      command: [ "/bin/sh","-c","cat /etc/config/redis.properties" ]
      volumeMounts:
      - name: config-volume
        mountPath: /etc/config
  volumes:
    - name: config-volume
      configMap:
        name: redis-config
  restartPolicy: Never
[[email protected] demo]# kubectl create -f configmap2.yaml 

[[email protected] demo]# kubectl get pod
NAME                     READY   STATUS      RESTARTS   AGE
mypod                    1/1     Running     0          30m
mypod2                   1/1     Running     0          24m
mypod3                   0/1     Completed   0          4m58s
mypod4                   0/1     Completed   0          15s
nginx-5ddcc6cb74-lplxl   1/1     Running     0          68m
验证这里已经将内容发送到控制台
[[email protected] demo]# kubectl logs mypod4
redis.host=127.0.0.1
redis.port=6379
redis.password=123456

原文地址:https://blog.51cto.com/14143894/2436194

时间: 2024-11-06 16:23:52

Kubernetes进阶之secret及configmap配置管理的相关文章

Kubernetes之(十三)ConfigMap和Secret

目录 Kubernetes之(十三)ConfigMap和Secret ConfigMap ConfigMap创建方式 存储卷方式挂载configmap: 使用nginx-www配置nginx Secret 创建 Secret Kubernetes之(十三)ConfigMap和Secret 简介 ConfigMap和Secret是kubernetes系统上两种特殊类型的存储卷,ConfigMao对象用于为容器中的应用提供配置数据以定制程序行为,不过年敏感的配置信息,例如密钥,证书等通常由Secre

Kubernetes数据持久化之Secret与ConfigMap

ConfigMap和Secret是Kubernetes中两种特殊类型的存储卷,ConfigMap这种资源对象主要用于提供配置数据以定制程序行为,不过一些敏感的配置信息,比如像用户名.密码.密钥等通常都是由Secret这种资源对象来进行配置的,他们将相应的配置信息保存于对象中,而后在Pod资源上以存储卷的形式将其挂载并获取相应配置,以实现配置与镜像文件的解耦. 一.Secret资源对象 1) Secret概述 Secret资源对象存储数据的方式是以键值对的方式进行存储的,在Pod资源进行Secre

Kubernetes进阶之hostpath及emptyDir数据卷

K8s进阶之数据卷与数据持久卷目录: 一 从外部访问应用最佳方式 二 配置管理 三 数据卷与数据持久卷 四 再谈有状态应用部署 五 K8S 安全机制 三.数据卷与数据持久卷数据卷产生的背景为什么有数据卷,这里的数据卷和docker的数据卷还不太一样,实现的机制不是一套,数据卷说白了就是能帮助你持久化你pod重要的数据,如果你不持久化的话,pod删除里面临时产生的数据也会被删除,这不管是k8s中还是docker中,这都是一样的,所以k8s和docker都提供了这种volume的这种相关功能,就是为

Kubernetes进阶之ingress-nginx

Kubernetes进阶之ingress-nginx 目录:一 从外部访问应用最佳方式 二 配置管理 三 数据卷与数据持久卷 四 再谈有状态应用部署 五 K8S 安全机制 说在前面的话,选择nodeport的方式去暴露端口,那你需要得去判断暴露的端口有没有被占用,再创建新的应用会判断端口有没有被分配出去 nodeport本身是基于默认的iptables的代理模式做的网络转发,也就是SANT,DANT,基于四层的,做七层是做不了的,性能差一点,因为它需要防火墙的转发和过滤. 一.从外部访问应用最佳

Kubernetes进阶之PersistentVolume 静态供给实现NFS网络存储

Kubernetes进阶之PersistentVolume 静态供给实现NFS网络存储网络存储 NFS是一种很早的技术,单机的存储在服务器方面还是非常主流的,但nfs唯一的就是缺点比较大就是没有集群版,做集群化还是比较费劲的,文件系统做不了,这是一个很大的弊端,大规模的还是需要选择一些分布式的存储,nfs就是一个网络文件存储服务器,装完nfs之后,共享一个目录,其他的服务器就可以通过这个目录挂载到本地了,在本地写到这个目录的文件,就会同步到远程服务器上,实现一个共享存储的功能,一般都是做数据的共

Kubernetes中的Secret配置

  Secret 概览 Secret 是一种包含少量敏感信息例如密码.token 或 key 的对象.这样的信息可能会被放在 Pod spec 中或者镜像中:将其放在一个 secret 对象中可以更好地控制它的用途,并降低意外暴露的风险. 用户可以创建 secret,同时系统也创建了一些 secret. 要使用 secret,pod 需要引用 secret.Pod 可以用两种方式使用 secret:作为 volume中的文件被挂载到 pod 中的一个或者多个容器里,或者当 kubelet 为 p

Kubernetes里的secret最基本的用法

Secret解决了密码.token.密钥等敏感数据的配置问题,使用Secret可以避免把这些敏感数据以明文的形式暴露到镜像或者Pod Spec中. Secret可以以Volume或者环境变量的方式使用. 使用如下命令行创建一个secret: kubectl create secret generic admin-access --from-file=./username.txt --from-file=./password.txt 输入文件username.txt和password.txt需要手

kubernetes进阶(01)pod

前言 本文是读书笔记,具体可参考 倪朋飞 先生的原文<kubernetes指南>,多谢原作者,致敬! Pod Pod是在K8s集群中运行部署应用或服务的最小单元,支持多个容器在一个Pod中共享网络地址和文件系统,可以通过进程间通信和文件共享这种简单高效的方式组合完成服务. 比如: 运行一个操作系统发行版的软件仓库:使用一个Nginx容器用来发布软件,另一个容器专门用来从源仓库做同步,这两个容器的镜像不太可能是一个团队开发的,但是他们一块儿工作才能提供一个微服务: 这种情况下,不同的团队各自开发

Kubernetes进阶之StatefulSet有状态部署

K8s有状态应用部署目录:分为两类1.Headless Service2.StatefulSet ? 部署有状态应用 ? 解决Pod独立生命周期,保持Pod启动顺序和唯一性 稳定,唯一的网络标识符,持久存储 有序,优雅的部署和扩展.删除和终止 有序,滚动更新 应用场景:数据库 说在前面的话,像我们的Mysql或者Redis了,Zookerper等等这些适不适合部署在K8s中,其实呢不是太适合,但部署在里面也可以,比如部署一个Mysql来讲吧,部署到k8s中还是很容易的就一个Mysql实例,就像部