16 配置与密钥管理之ConfigMap与Secret的使用

在上一篇中,我们探讨了 Ingress 控制器的原理及其负载均衡的应用。这一篇将深入探讨Kubernetes中的配置与密钥管理,特别是 ConfigMapSecret 的使用场景和最佳实践,这将为您在应用程序中管理配置和敏感信息打下坚实的基础。

什么是ConfigMap?

ConfigMap 是 Kubernetes 中的一种资源类型,旨在存储非机密的配置信息,使这些信息可以被 Pods 轻松访问。您可以将配置数据分开存储,使得应用的容器更加灵活,避免在每次应用更新时都需要重新构建镜像。

创建ConfigMap

可以通过 kubectl 命令或者 YAML 文件来创建 ConfigMap。下面是一个使用 YAML 文件创建 ConfigMap 的示例:

1
2
3
4
5
6
7
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
DATABASE_URL: "mysql://user:password@mysql:3306/dbname"
FEATURE_FLAG: "true"

您可以将上述内容保存为 configmap.yaml,然后运行以下命令来创建 ConfigMap

1
kubectl apply -f configmap.yaml

使用ConfigMap

创建完成后,您可以在 Pod 中引用 ConfigMap。以下是一个将 ConfigMap 中的环境变量传递给容器的示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-deployment
spec:
replicas: 1
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: myapp:latest
env:
- name: DATABASE_URL
valueFrom:
configMapKeyRef:
name: app-config
key: DATABASE_URL

在上面的例子中,DATABASE_URL 的值来自于 ConfigMap,这样您就可以在不修改容器镜像的情况下,灵活地更新配置。

什么是Secret?

Secret 是 Kubernetes 提供的一种资源类型,用于安全地存储和管理敏感信息,例如数据库密码、OAuth 令牌和 SSH 密钥等。这样可以提高安全性,确保敏感信息不会在镜像中硬编码。

创建Secret

ConfigMap 相似,Secret 也可以通过 kubectl 命令或 YAML 文件创建。以下是使用 YAML 文件创建 Secret 的示例:

1
2
3
4
5
6
7
apiVersion: v1
kind: Secret
metadata:
name: app-secret
type: Opaque
data:
MYSQL_PASSWORD: bXlzcWw= # "mysql" 的 base64 编码

将上述内容保存为 secret.yaml,并运行以下命令创建 Secret

1
kubectl apply -f secret.yaml

使用Secret

您可以通过环境变量或挂载卷的方式在 Pod 中使用 Secret。以下是通过环境变量引用 Secret 的示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-deployment
spec:
replicas: 1
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: myapp:latest
env:
- name: MYSQL_PASSWORD
valueFrom:
secretKeyRef:
name: app-secret
key: MYSQL_PASSWORD

在这个例子中,MYSQL_PASSWORD 的值安全地获取自 Secret,确保不会暴露在镜像或代码中。

总结

在本篇中,我们深入探讨了 ConfigMapSecret 的使用,以及如何在Kubernetes中管理配置和敏感信息。这两者为您的应用提供了极大的灵活性和安全性,使配置管理变得更加简便和安全。

在下一篇中,我们将探讨更为复杂的配置文件管理,进一步提升我们的应用部署能力。

16 配置与密钥管理之ConfigMap与Secret的使用

https://zglg.work/kubernetes-zero/16/

作者

IT教程网(郭震)

发布于

2024-08-15

更新于

2024-08-16

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论