(转)Kubernetes 配置Pod和容器(十七) 使用Secrets管理安全证书

转:https://www.jianshu.com/p/530b3642c642

本章节展示了如何把密码秘钥等敏感数据安全的注入到Pod里面。

转换安全数据成base-64表示

假设你有两个秘密数据:一个用户名my-app和一个密码39528$vdg7Jb。首先使用Base64-encoding转换用户名和密码用base-64来表示。下面是一个用Linux转换的例子:

echo -n ‘my-app‘ | base64
echo -n ‘39528$vdg7Jb‘ | base64

输出展示了用户名转换以后的字符串是bXktYXBw,密码转换以后是Mzk1MjgkdmRnN0pi。

创建一个Secret

下面是一个配置文件创建一个Secret来保存用户名和密码:

apiVersion: v1
kind: Secret
metadata:
  name: test-secret
data:
  username: bXktYXBwCg==
  password: Mzk1MjgkdmRnN0piCg==

1.创建Secret

kubectl create -f secret.yaml

注意:如果你想跳过Base64转码的步骤,可以使用kubectl create secret命令创建Secret:

 kubectl create secret generic test-secret --from-literal=username=‘my-app‘,password=‘39528$vdg7Jb‘

2.查看Secret的详细信息:

kubectl get secret test-secret

输出:

NAME          TYPE      DATA      AGE
 test-secret   Opaque    2         1m

3.查看更多详细信息:

 kubectl describe secret test-secret

输出:

 Name:       test-secret
 Namespace:  default
 Labels:     <none>
 Annotations:    <none>

 Type:   Opaque

 Data
 ====
 password:   13 bytes
 username:   7 bytes

创建一个Pod通过卷访问秘密数据

下面是一个配置文件可以用来创建一个Pod:

apiVersion: v1
kind: Pod
metadata:
  name: secret-test-pod
spec:
  containers:
    - name: test-container
      image: nginx
      volumeMounts:
          # name must match the volume name below
          - name: secret-volume
            mountPath: /etc/secret-volume
  # The secret data is exposed to Containers in the Pod through a Volume.
  volumes:
    - name: secret-volume
      secret:
        secretName: test-secret

1.创建Pod:

kubectl create -f secret-pod.yaml

2.验证Pod是否运行:

kubectl get pod secret-test-pod

输出:

NAME              READY     STATUS    RESTARTS   AGE
 secret-test-pod   1/1       Running   0          42m

3.使用shell进入到pod运行的容器里面:

kubectl exec -it secret-test-pod -- /bin/bash

4.这个秘密数据公开在容器/etc/secret-volume目录里面通过卷挂载的方式。进入这个目录,并查看这个数据:

[email protected]pod:/# cd /etc/secret-volume

5.在shell里面查看/etc/secret-volume目录下的文件:

[email protected]pod:/etc/secret-volume# ls

输出展示了两个文件,每一个都对应相应的秘密数据:

password username

输出是用户名和密码:

 my-app
 39528$vdg7Jb

创建Pod通过环境变量访问秘密数据

下面是一个创建Pod的配置文件:

apiVersion: v1
kind: Pod
metadata:
  name: secret-envars-test-pod
spec:
  containers:
  - name: envars-test-container
    image: nginx
    env:
    - name: SECRET_USERNAME
      valueFrom:
        secretKeyRef:
          name: test-secret
          key: username
    - name: SECRET_PASSWORD
      valueFrom:
        secretKeyRef:
          name: test-secret
          key: password

1.创建Pod:

kubectl create -f secret-envars-pod.yaml

2.验证Pod是否已经运行:

kubectl get pod secret-envars-test-pod

输出:

NAME                     READY     STATUS    RESTARTS   AGE
 secret-envars-test-pod   1/1       Running   0          4m

3.用shell进入Pod运行的容器里面:

kubectl exec -it secret-envars-test-pod -- /bin/bash

4.在shell里面展示环境变量:

[email protected]pod:/# printenv

输出包含用户名和密码:

 ...
 SECRET_USERNAME=my-app
 ...
 SECRET_PASSWORD=39528$vdg7Jb

作者:YiQinGuo
链接:https://www.jianshu.com/p/530b3642c642
來源:简书

原文地址:https://www.cnblogs.com/wangle1001986/p/9726894.html

时间: 2024-08-30 18:27:48

(转)Kubernetes 配置Pod和容器(十七) 使用Secrets管理安全证书的相关文章

19.Kubernetes深入Pod之容器共享Volume

Pod容器共享Volume 在同一个Pod中多个容器能够共享Pod级别的存储卷Volume,如图: 在下面的例子中,Pod内包含两个容器:tomcat和busybox,在Pod级别设置Volume“app-logs”,用于tomcat向其中写日志文件,busybox读取日志文件 配置文件pod-volume-applogs.yaml apiVersion: v1 kind: Pod metadata: name: volume-pod spec: containers: - name: tomc

Kubernetes基石-pod容器

引用三个问题来叙述Kubernetes的pod容器 1.为什么不直接在一个Docker容器中运行所有的应用进程. 2.为什么pod这种容器中要同时运行多个Docker容器(可以只有一个) 3.为什么k8s使用pod这种容器而不直接使用Docker容器 一个由多个进程进行组成的应用程序,无论是通过ipc(进程间通信)还是本地存储文件进行通信,都要求它们运行于同一台机器上.Docker容器非常像一台独立的机器,此时你可能认为在单个容器中运行多个进程是合乎逻辑的,然而在实践中这种做法并不合理. 容器被

深入kubernetes之Pod——一pod多容器

六.深入Pod--一pod多容器 一pod多容器,可以说是kube精华所在,让多个同应用的单一容器可以整合到一个类虚拟机中,使其所有容器共用一个vm的资源,提高耦合度,神来之笔,从而方便副本的复制,提高整体的可用性 接下来会从我自己的学习历程,讲诉一pod多容器,其中历经的困难,此问题有困扰一个月之久. 1.测试过程: 根据文章:http://www.csdn.net/article/2014-12-18/2823196 ,看到pod还有一pod多容器的功能,仅是看了文章便激动不已,一pod多容

为什么我们需要Pod?(容器设计模式sidecar)

Pod,是 Kubernetes 项目中最小的 API 对象 容器的本质是进程,就是未来云计算系统中的进程:容器镜像就是这个系统里的".exe"安装包 Kubernetes 就是操作系统! Pod 里的所有容器,共享的是同一个 Network Namespace,并且可以声明共享同一个 Volum 所以, 在 Kubernetes 项目里,Pod 的实现需要使用一个中间容器,这个容器叫作 Infra 容器.在这个 Pod 中,Infra 容器永远都是第一个被创建的容器,而其他用户定义的

Kubernetes之Pod控制器,ReplicaSet,Deployment,DaemonSet

目录 Kubernetes之Pod控制器,ReplicaSet,Deployment,DaemonSet ReplicaSet Deployment控制器 创建Deployment Deployment更新 Deployment扩容 金丝雀发布 Deployment回滚 DaemonSet 定义 DaemonSet演示 redis-filebeat DaemonSet的滚动更新 Kubernetes之Pod控制器,ReplicaSet,Deployment,DaemonSet Kubernete

Kubernetes之Pod控制器应用进阶

目录 Kubernetes之Pod控制器应用进阶 Pod控制器下spec常用字段 标签(Labels)和标签选择器(LabelSelector) 标签 标签选择器 Kubernetes之Pod控制器应用进阶 Pod控制器下spec常用字段 #containers [[email protected] ~]# kubectl explain pods.spec.containers. name <string> -required- #容器名,必选字段 image <string>

Kubernetes之Pod的生命周期

目录 Kubernetes之Pod的生命周期 理解Pod Pod内如何管理多个容器 Pod的使用 其他替代选择 Pod的持久性 Pod的终止 Init容器 Pause容器 Pod的生命周期 Pod的phase Pod的状态 容器探针 存活性探测 livenessProbe 就绪性探测 readnessProbe livenessProbe和readinessProbe使用场景 lifecycle Kubernetes之Pod的生命周期 理解Pod Pod是kubernetes中你可以创建和部署的

kubernetes之pod超详细解读--第一篇(三)

   小编在这里向各位博友道个歉,上篇文章确实写的有些应付,但怎么说,部署确实因人而异,而且很少有刚刚进公司就让你搭建一个集群,一般公司都有自己的集群,所以小编觉得,侧重点不应该在安装,应该在维护!虽然有些牵强,但小编保证,这一篇绝对有质量!希望看了小编的博客,大家对pod有更深入的认识.   这篇文章,小编打算介绍关于pod的11个重要的知识点,大家要有耐心的看下去哦!虽然内容比较多,有兴趣的朋友可以细细阅读,小编会尽可能的用比较容易理解的话和图,去介绍比较重要并且难以理解的地方. 1. po

kubernetes之pod超详细解读--第二篇(三)

8.资源对象对pod的调度 ??在kubernetes集群中,pod基本上都是容器的载体,通常需要通过相应的资源对象来完成一组pod的调度和自动控制功能,比如:deployment.daemonSet.RC.Job等等.接下来小编将一一介绍这些资源对象如何调度pod. (1)Deployment/RC 自动化调度 ??Deployment/RC的主要功能之一就是自动部署一个容器应用的多个副本,以及持续监控副本数量,在集群内始终维持用户指定的副本数量.举例:(这里以deployment为例) ap