尝试编写deploy使用configmap以及serct进行重要消息存储的卷挂载
实践策划
- 目标设定:
- 在Kubernetes中使用ConfigMap和Secret存储重要的配置数据和敏感信息。
- 将这些数据以卷的形式挂载到Pod中,使其在容器内可用。
- 通过实际操作掌握如何管理和使用ConfigMap和Secret,并了解它们的权限控制和安全性。
- 验证在容器内的读取和修改操作,以及了解ConfigMap和Secret的更新机制对Pod的影响。
- 内容规划:
- 创建ConfigMap和Secret资源。
- 使用ConfigMap和Secret挂载卷到Pod中。
- 验证挂载成功以及在容器内读取数据。
- 测试ConfigMap和Secret的更新机制。
- 讨论ConfigMap和Secret的最佳实践与安全管理。
创建命名空间
kubectl create namespace config-secret-practice
|
创建ConfigMap
apiVersion: v1 kind: ConfigMap metadata: name: app-config namespace: config-secret-practice data: config.json: | { "setting1": "value1", "setting2": "value2", "setting3": "value3" } database_url: "mongodb://mongo-svc:27017"
|
创建Secret
apiVersion: v1 kind: Secret metadata: name: db-secret namespace: config-secret-practice type: Opaque data: db-password: bXlwYXNzd29yZA==
|
创建deploy
apiVersion: apps/v1 kind: Deployment metadata: name: app-deployment namespace: config-secret-practice spec: replicas: 2 selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: containers: - name: my-app-container image: docker.m.daocloud.io/library/busybox command: ["/bin/sh", "-c", "while true; do sleep 3600; done"] volumeMounts: - name: config-volume mountPath: /etc/config - name: secret-volume mountPath: /etc/secret env: - name: DB_PASSWORD valueFrom: secretKeyRef: name: db-secret key: db-password volumes: - name: config-volume configMap: name: app-config - name: secret-volume secret: secretName: db-secret
|
验证卷挂载
查看环境变量
修改configmap测试是否实时更新
更新secret:
echo -n 'newpassword' | base64 kubectl apply -f db-secret.yaml
|
这里为什么没有被修改到,因为secret作为环境变量时候需要重新启动pod
启动自动滚动更新
我们在deploy选项下面添加serect的optinal为true
apply后直接
kubectl rollout status deployment/app-deployment -n config-secret-practice
|
使用RBAC,限制对ConfigMap和Secret的访问
kubectl create serviceaccount app-user -n config-secret-practice
|
apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: namespace: config-secret-practice name: config-secret-role rules: - apiGroups: [""] resources: ["configmaps", "secrets"] resourceNames: ["app-config", "db-secret"] verbs: ["get", "list", "watch"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: config-secret-rolebinding namespace: config-secret-practice roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: config-secret-role subjects: - kind: ServiceAccount name: app-user namespace: config-secret-practice
|
kubectl auth can-i get configmap/app-config --as=system:serviceaccount:config-secret-practice:app-user -n config-secret-practice
|
使用一个带有serviceAccount的pod验证
apiVersion: v1 kind: Pod metadata: name: test-pod namespace: config-secret-practice spec: serviceAccountName: app-user containers: - name: test-container image: docker.m.daocloud.io/library/busybox command: ["/bin/sh", "-c", "sleep 3600"]
|