hashicorp/consul-k8sconsul-k8s 是 HashiCorp 提供的官方镜像,用于实现 Consul 与 Kubernetes(K8s)的原生集成。该镜像包含控制平面组件,负责协调 Consul 与 K8s 集群的交互,提供服务注册、配置管理、服务网格等核心功能。新镜像已迁移至 Docker Hub 仓库:hashicorp/consul-k8s-control-plane。
主要用途:作为 Consul 与 K8s 集群的集成桥梁,简化在 K8s 环境中部署、管理和使用 Consul 的流程,实现微服务架构下的服务发现、配置同步和流量管理。
从 Docker Hub 拉取最新版本镜像:
bashdocker pull hashicorp/consul-k8s-control-plane:latest
指定版本(推荐生产环境使用固定版本):
bashdocker pull hashicorp/consul-k8s-control-plane:1.2.3 # 替换为实际版本号
通过官方 Helm Chart 部署 consul-k8s 控制平面及 Consul 集群:
bashhelm repo add hashicorp [***] helm repo update
bashhelm install consul hashicorp/consul \ --namespace consul --create-namespace \ --set global.name=consul \ --set server.replicas=3 \ # 生产环境推荐 3+ 副本 --set client.enabled=true \ --set connectInject.enabled=true # 启用 Connect Sidecar 注入
控制平面容器支持通过环境变量调整行为,常用变量如下:
| 环境变量名 | 描述 | 默认值 |
|---|---|---|
CONSUL_HTTP_ADDR | Consul 服务器地址(如 consul-server:8500) | http://localhost:8500 |
KUBERNETES_SERVICE_HOST | K8s API Server 地址 | 自动从 K8s 环境变量获取 |
NAMESPACE | 控制平面部署的 K8s Namespace | default |
LOG_LEVEL | 日志级别(trace/debug/info/warn/error) | info |
SYNC_INTERVAL | 服务状态同步间隔(如 30s) | 10s |
通过 values.yaml 自定义部署配置,核心参数示例:
yaml# 控制平面配置 controller: enabled: true # 启用控制平面控制器 replicas: 2 # 控制平面副本数(生产环境推荐 2+) # Consul 服务器配置 server: enabled: true replicas: 3 storageClass: "standard" # 持久化存储类 resources: requests: cpu: "500m" memory: "1Gi" # Connect 注入配置 connectInject: enabled: true default: true # 对所有 Pod 自动注入 Sidecar(可通过注解禁用) transparentProxy: enabled: true # 启用透明代理 # 服务网格配置 meshGateway: enabled: true # 启用网格网关(跨数据中心通信)
bash# 创建自定义 values.yaml cat > values.yaml << EOF global: name: consul datacenter: dc1 controller: enabled: true logLevel: debug connectInject: enabled: true default: false # 需手动注解 Pod 才注入 Sidecar server: replicas: 3 EOF # 安装或升级 Helm Release helm install consul hashicorp/consul \ --namespace consul --create-namespace \ -f values.yaml
通过注解手动启用服务注册和 Sidecar 注入:
yamlapiVersion: apps/v1 kind: Deployment metadata: name: example-service namespace: default spec: replicas: 2 selector: matchLabels: app: example-service template: metadata: labels: app: example-service annotations: consul.hashicorp.com/connect-inject: "true" # 启用 Sidecar 注入 consul.hashicorp.com/service-name: "example-service" # 注册到 Consul 的服务名 consul.hashicorp.com/health-check-path: "/health" # 健康检查路径 spec: containers: - name: service image: nginx:alpine ports: - containerPort: 80
consul-k8s-control-plane 版本与 Consul 服务器版本匹配(参考 官方兼容性矩阵)。200m CPU 和 256Mi 内存,避免因资源不足导致同步延迟。global.tls.enabled: true)和 RBAC 权限控制。manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务