Kubernetes应用配置全解析
立即解锁
发布时间: 2025-08-24 02:05:38 阅读量: 3 订阅数: 4 

### Kubernetes 应用配置与安全:ConfigMaps 与 Secrets 深度解析
#### 1. Kubernetes 应用对外暴露方法概述
Kubernetes 提供了多种将集群内运行的应用暴露给外部的方法,主要包括 Services 和 Ingress。
- **Services**:
- **ClusterIP Services**:用于集群内路由。
- **NodePort**:可通过节点上的端口直接访问服务。
- **LoadBalancer Services**:能使用现有的云负载均衡系统。
- **ExternalName Services**:可将请求路由到集群外的外部资源。
- **Ingress**:是一种强大的按路径路由集群内请求的工具。要实现 Ingress,需要在集群上安装第三方或开源的 Ingress 控制器。
#### 2. 技术要求
要运行相关命令,需要一台支持 `kubectl` 命令行工具的计算机,以及一个正常运行的 Kubernetes 集群。代码可在相关 GitHub 仓库中找到。
#### 3. 容器化应用配置最佳实践
虽然可以通过 Dockerfile 中的环境变量来配置应用,但这会错过 Kubernetes 编排器的一些真正价值。为了在不重建 Docker 镜像的情况下更改应用容器,Kubernetes 提供了两种专注于配置的资源:ConfigMaps 和 Secrets。
#### 4. 理解 ConfigMaps
在生产环境中运行应用时,开发人员希望能够快速轻松地注入应用配置信息。Kubernetes 中的 ConfigMap 资源可以灵活、轻松地实现这一点,它允许管理员将配置信息指定并注入为文件或环境变量。
#### 5. 实现 ConfigMaps
ConfigMaps 提供了一种简单的方法来存储和注入运行在 Kubernetes 上的容器的应用配置数据。创建 ConfigMap 有以下几种方式:
- **从文本值创建**
- 创建单个键值的 ConfigMap:
```bash
kubectl create configmap myapp-config --from-literal=mycategory.mykey=myvalue
```
- 创建多个键值的 ConfigMap:
```bash
kubectl create configmap myapp-config2 --from-literal=mycategory.mykey=myvalue --from-literal=mycategory.mykey2=myvalue2
```
- 查看 ConfigMap:
```bash
kubectl get configmap myapp-config2
```
- 输出示例:
```yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: myapp-config2
namespace: default
data:
mycategory.mykey: myvalue
mycategory.mykey2: myvalue2
```
- **从文件创建**
1. 创建文件 `env.properties`:
```plaintext
myconfigid=1125
publicapikey=i38ahsjh2
```
2. 创建 ConfigMap:
```bash
kubectl create configmap my-config-map --from-file=env.properties
```
3. 检查 ConfigMap:
```bash
kubectl describe configmaps my-config-map
```
4. 输出示例:
```plaintext
Name: my-config-map
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
env.properties: 39 bytes
```
- **从环境文件创建**
- 创建 ConfigMap:
```bash
kubectl create configmap my-env-config-map --from-env-file=env.properties
```
- 描述 ConfigMap:
```bash
kubectl describe configmaps my-env-config-map
```
- 输出示例:
```plaintext
Name: my-env-config-map
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
myconfigid:
----
1125
publicapikey:
----
i38ahsjh2
Events: <none>
```
#### 6. 挂载 ConfigMap
- **作为卷挂载**
```yaml
apiVersion: v1
kind: Pod
metadata:
name: my-pod-mount-cm
spec:
containers:
- name: busybox
image: busybox
command:
- sleep
- "3600"
volumeMounts:
- name: my-config-volume
mountPath: /app/config
volumes:
- name: my-config-volume
configMap:
name: my-config-map
restartPolicy: Never
```
- **作为环境变量挂载**
```yaml
apiVersion: v1
kind: Pod
metadata:
name: my-pod-mount-env
spec:
containers:
- name: busybox
image: busybox
comm
```
0
0
复制全文
相关推荐









