Kubernetes中配置映射、密钥与元数据传递全解析
立即解锁
发布时间: 2025-08-21 00:51:32 阅读量: 1 订阅数: 11 


Kubernetes实战:从入门到精通
### 容器配置与元数据传递全解析
#### 1. ConfigMaps与Secrets:应用配置
在容器化应用中,配置数据的传递至关重要。以下是几种常见的配置数据传递方式:
- **覆盖容器镜像默认命令**:在Pod定义中可以覆盖容器镜像里预设的默认命令。
- **传递命令行参数**:向主容器进程传递命令行参数。
- **设置环境变量**:为容器设置环境变量。
- **使用ConfigMap**:将配置与Pod规范解耦,把配置数据存于ConfigMap中。
- **使用Secret**:存储敏感数据,并安全地传至容器。
- **创建docker - registry Secret**:用于从私有镜像仓库拉取镜像。
下面重点介绍使用Secret传递敏感数据的相关内容。
##### 1.1 通过环境变量暴露Secret
可以将Secret的条目作为环境变量暴露给容器,示例代码如下:
```yaml
env:
- name: FOO_SECRET
valueFrom:
secretKeyRef:
name: fortune - https
key: foo
```
这与设置`INTERVAL`环境变量类似,只是这次使用`secretKeyRef`引用Secret,而不是使用`configMapKeyRef`引用ConfigMap。
不过,虽然Kubernetes允许通过环境变量暴露Secret,但这可能不是最佳做法。因为应用通常会在错误报告中输出环境变量,甚至在启动时将其写入应用日志,这可能会无意中暴露敏感数据。此外,子进程会继承父进程的所有环境变量,如果应用运行第三方二进制文件,就无法知晓敏感数据的处理情况。
**建议**:在使用环境变量将Secret传递给容器之前要三思,为安全起见,应始终使用Secret卷来暴露Secret。
##### 1.2 理解镜像拉取Secret
有时Kubernetes本身需要你传递凭证,例如使用私有容器镜像仓库的镜像时,这也通过Secret来实现。
在Docker Hub上使用私有镜像仓库的步骤如下:
1. **创建私有仓库**:通过浏览器登录`http://hub.docker.com`,找到仓库并勾选复选框将其标记为私有。
2. **创建Secret**:创建一个包含Docker注册表凭证的Secret。
```bash
$ kubectl create secret docker - registry mydockerhubsecret \
--docker - username=myusername --docker - password=mypassword \
--docker - [email protected]
```
3. **在Pod定义中引用Secret**:在Pod清单的`imagePullSecrets`字段中引用该Secret。
```yaml
apiVersion: v1
kind: Pod
metadata:
name: private - pod
spec:
imagePullSecrets:
- name: mydockerhubsecret
containers:
- image: username/private:tag
name: main
```
#### 2. 通过Downward API传递元数据
应用常常需要了解其运行环境的信息,包括自身和集群中其他组件的详细信息。Kubernetes的Downward API可以将某些Pod和容器元数据传递给容器。
##### 2.1 可用元数据
Downward API能将以下信息传递给容器:
| 元数据类型 | 说明 |
| ---- | ---- |
| Pod名称 | Pod的唯一标识符 |
| Pod IP地址 | Pod的网络地址 |
| Pod所属命名空间 | Pod所在的命名空间 |
| Pod运行所在节点的名称 | 运行Pod的节点名称 |
| Pod运行的服务账户名称 | Pod与API服务器通信时使用的账户 |
| 每个容器的CPU和内存请求 | 容器保证获得的CPU和内存资源 |
| 每个容器的CPU和内存限制 | 容器允许使用的最大CPU和内存资源 |
| Pod的标签 | 用于标识和分类Pod的键值对 |
| Pod的注解 | 用于存储额外的非标识性信息 |
大部分元数据可以通过环境变量或`downwardAPI`卷传递,但标签和注解只能通过卷暴露。
##### 2.2 通过环境变量暴露元数据
以下是一个通过环境变量暴露元数据的示例:
```yaml
apiVersion: v1
kind: Pod
metadata:
name: downward
spec:
containers:
- name: main
image: busybox
command: ["sleep", "9999999"]
resources:
requests:
cpu: 15m
memory: 100Ki
limits:
cpu: 100m
memory: 4Mi
env:
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: POD_NAMESPAC
```
0
0
复制全文
相关推荐










