Spring Cloud Config 部署指南:Docker、Kubernetes 生产环境配置
Spring Cloud Config 是 Spring Cloud 生态系统中的外部配置管理工具,提供了服务器和客户端支持,帮助开发者集中管理不同环境的配置信息。本指南将详细介绍如何在 Docker 和 Kubernetes 环境中部署 Spring Cloud Config,实现配置的高效管理和动态更新。
📋 准备工作
在开始部署前,请确保环境中已安装以下工具:
- JDK 21 或更高版本
- Maven 3.6+ 或 Gradle 7.0+
- Docker 19.03+
- Kubernetes 1.24+
- Git 客户端
首先克隆项目仓库:
git clone https://gitcode.com/gh_mirrors/sp/spring-cloud-config
cd spring-cloud-config
🐳 Docker 部署方案
构建 Spring Cloud Config 镜像
Spring Cloud Config 提供了服务端组件 spring-cloud-config-server,我们可以通过 Maven 构建可执行 JAR 包并制作 Docker 镜像。
- 使用 Maven 构建项目:
./mvnw clean package -DskipTests
- 创建 Dockerfile(项目根目录):
FROM eclipse-temurin:21-jre-alpine
WORKDIR /app
COPY spring-cloud-config-server/target/spring-cloud-config-server-*.jar app.jar
EXPOSE 8888
ENTRYPOINT ["java", "-jar", "/app/app.jar"]
- 构建 Docker 镜像:
docker build -t spring-cloud-config-server:latest .
运行 Config Server 容器
使用以下命令启动 Config Server 容器,配置 Git 仓库作为配置源:
docker run -d -p 8888:8888 \
-e "SPRING_CLOUD_CONFIG_SERVER_GIT_URI=https://github.com/spring-cloud-samples/config-repo" \
--name config-server \
spring-cloud-config-server:latest
验证服务是否正常运行:
curl http://localhost:8888/foo/development
预期会返回类似以下的配置信息:
{
"name": "foo",
"profiles": ["development"],
"propertySources": [
{
"name": "https://github.com/spring-cloud-samples/config-repo/foo-development.properties",
"source": {
"bar": "spam",
"foo": "from foo development"
}
}
]
}
☸️ Kubernetes 部署方案
创建 ConfigMap 配置
首先创建 Kubernetes ConfigMap 存储 Config Server 配置:
# config-server-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: config-server-config
data:
application.yaml: |-
spring:
cloud:
config:
server:
git:
uri: https://github.com/spring-cloud-samples/config-repo
repos:
- patterns: multi-repo-demo-*
uri: https://github.com/spring-cloud-samples/config-repo
server:
port: 8888
应用配置:
kubectl apply -f config-server-config.yaml
部署 Config Server
创建 Deployment 文件:
# config-server-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: config-server
spec:
replicas: 2
selector:
matchLabels:
app: config-server
template:
metadata:
labels:
app: config-server
spec:
containers:
- name: config-server
image: spring-cloud-config-server:latest
ports:
- containerPort: 8888
volumeMounts:
- name: config-volume
mountPath: /app/config
resources:
requests:
memory: "256Mi"
cpu: "200m"
limits:
memory: "512Mi"
cpu: "500m"
volumes:
- name: config-volume
configMap:
name: config-server-config
部署到 Kubernetes:
kubectl apply -f config-server-deployment.yaml
创建 Service 暴露服务
# config-server-service.yaml
apiVersion: v1
kind: Service
metadata:
name: config-server
spec:
selector:
app: config-server
ports:
- port: 8888
targetPort: 8888
type: ClusterIP
应用服务配置:
kubectl apply -f config-server-service.yaml
🔒 生产环境安全配置
启用 HTTPS
为生产环境配置 HTTPS,需要准备 SSL 证书并修改配置:
# 生产环境配置示例
server:
port: 8443
ssl:
enabled: true
key-store: classpath:keystore.jks
key-store-password: password
key-password: password
证书生成方法可参考项目文档 docs/modules/ROOT/pages/server/creating-a-key-store-for-testing.adoc
配置访问控制
通过 Spring Security 保护 Config Server 端点,修改配置:
spring:
security:
user:
name: configuser
password: configpassword
客户端连接时需要提供凭据:
spring:
config:
import: "configserver:https://configuser:configpassword@config-server:8443"
🔄 配置动态刷新
客户端配置
在客户端应用中添加依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
启用刷新端点:
management:
endpoints:
web:
exposure:
include: refresh
在需要动态刷新的配置类上添加 @RefreshScope 注解:
@RefreshScope
@RestController
public class MyController {
@Value("${app.message}")
private String message;
// ...
}
触发配置刷新
使用以下命令触发客户端配置刷新:
curl -X POST http://client-app:8080/actuator/refresh
对于多实例部署,建议结合 Spring Cloud Bus 实现批量刷新,配置方法参见 docs/modules/ROOT/pages/server/push-notifications-and-bus.adoc
📊 监控与健康检查
Config Server 提供了健康检查端点,可通过以下配置启用:
management:
endpoints:
web:
exposure:
include: health,info
endpoint:
health:
show-details: always
访问健康检查端点:
curl http://config-server:8888/actuator/health
健康检查详细配置可参考 docs/modules/ROOT/pages/server/health-indicator.adoc
🚀 最佳实践与性能优化
配置仓库优化
- 使用本地缓存:减少 Git 仓库访问次数
spring:
cloud:
config:
server:
git:
basedir: /tmp/config-repo
timeout: 5
- 配置搜索路径:限制搜索范围提升性能
spring:
cloud:
config:
server:
git:
search-paths: 'configs/*'
高可用部署
- 多实例部署:通过 Kubernetes Deployment 配置多个副本
- 外部化配置:使用 Kubernetes ConfigMap 或 Secret 管理敏感配置
- 配置中心集群:结合 Spring Cloud Eureka 实现服务发现
常见问题排查
- 配置不生效:检查
spring.application.name和 profiles 是否正确 - 连接超时:验证 Git 仓库地址和网络连通性
- 权限问题:确保 Config Server 有足够权限访问配置仓库
更多故障排除指南可参考 docs/modules/ROOT/pages/server/diagnostics/
📚 参考文档
- 官方快速入门:docs/modules/ROOT/pages/quickstart.adoc
- 服务端配置:docs/modules/ROOT/pages/server.adoc
- 客户端使用:docs/modules/ROOT/pages/client.adoc
- 环境仓库配置:docs/modules/ROOT/pages/server/environment-repository.adoc
通过以上步骤,您已成功在 Docker 和 Kubernetes 环境中部署了 Spring Cloud Config。合理的配置管理策略将帮助您的微服务架构更加灵活和可维护。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



