1. ArgoCD 访问方式概述:为什么需要域名配置?
ArgoCD 作为 Kubernetes 生态中广泛使用的 GitOps 工具,默认安装后会暴露 Service 的 ClusterIP 或 NodePort 端口。但在生产环境中,直接通过 IP+端口访问存在三个明显问题:
- 记忆成本高:每次访问都需要输入完整 IP 和端口号,如
http://192.168.1.100:8080 - 环境隔离弱:开发、测试、生产环境切换时需要记住不同 IP
- 安全性缺陷:HTTP 明文传输不符合企业安全规范
通过域名访问可以完美解决这些问题。以 argocd.example.com 为例:
- 统一入口:所有环境通过相同域名访问
- 路径区分:
dev.argocd.example.com/prod.argocd.example.com - HTTPS 加密:配合证书实现传输安全
提示:ArgoCD 的 API Server 和 UI 共用同一个 Service,域名配置本质是对该 Service 的访问入口改造
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 内网 HTTP 访问配置方案
2.1 基础环境准备
假设已有以下基础设施:
- Kubernetes 集群版本 ≥1.19
- ArgoCD 已通过 Helm 或 manifest 部署
- 内网 DNS 服务器(如 CoreDNS)
- 测试用客户端能访问集群网络
检查当前 ArgoCD 服务状态:
bash复制kubectl -n argocd get svc argocd-server
预期输出:
code复制NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)
argocd-server NodePort 10.96.xx.xx <none> 80:30080/TCP,443:30443/TCP
2.2 域名解析配置
在内网 DNS 添加 A 记录指向:
- 方案A(NodePort):Kubernetes 节点 IP
- 方案B(Ingress):Ingress Controller 的 Service IP
示例 bind 配置:
code复制argocd-internal IN A 192.168.1.100
验证解析是否生效:
bash复制dig +short argocd-internal.example.com
# 应返回配置的 IP
2.3 服务暴露方式选择
方案1:NodePort 直连
修改 Service 配置:
yaml复制apiVersion: v1
kind: Service
metadata:
name: argocd-server
spec:
type: NodePort
ports:
- name: http
port: 80
targetPort: 8080
nodePort: 30080
访问测试:
code复制http://argocd-internal.example.com:30080
方案2:通过 Ingress 转发
创建 Ingress 资源:
yaml复制apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: argocd-http
annotations:
nginx.ingress.kubernetes.io/backend-protocol: "HTTP"
spec:
rules:
- host: argocd-internal.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: argocd-server
port:
number: 80
注意:使用 Nginx Ingress 时需要添加
backend-protocol注解,避免协议不匹配
2.4 常见问题排查
问题1:域名解析成功但访问超时
- 检查节点防火墙规则:
bash复制
iptables -L -n | grep 30080 - 验证 Service 的 endpoints 是否健康:
bash复制
kubectl -n argocd get ep argocd-server
问题2:出现 502 Bad Gateway
- 检查 ArgoCD Server 日志:
bash复制
kubectl -n argocd logs deploy/argocd-server - 确认容器端口与 Service 定义一致(默认 8080)
3. 外网 HTTPS 访问安全配置
3.1 证书准备方案对比
| 方案 | 适用场景 | 优缺点对比 |
|---|---|---|
| Let's Encrypt | 公有云环境 | 免费/自动续期,需开放80端口 |
| 企业自签证书 | 内部测试环境 | 需手动信任证书,零成本 |
| 商业证书 | 生产环境 | 高信任度,年费制 |
以 Let's Encrypt 为例的 cert-manager 配置:
yaml复制apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: admin@example.com
privateKeySecretRef:
name: letsencrypt-prod-account-key
solvers:
- http01:
ingress:
class: nginx
3.2 Ingress 完整配置示例
yaml复制apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: argocd-https
annotations:
cert-manager.io/cluster-issuer: "letsencrypt-prod"
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
spec:
tls:
- hosts:
- argocd.example.com
secretName: argocd-tls
rules:
- host: argocd.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: argocd-server
port:
number: 443
关键参数说明:
force-ssl-redirect:强制 HTTP 跳转 HTTPStls.secretName:证书保存的 Secret 名称backend-protocol:ArgoCD Server 实际使用 HTTP
3.3 APISIX 网关集成方案
对于使用 APISIX 的架构,路由配置示例:
yaml复制apiVersion: apisix.apache.org/v2
kind: ApisixRoute
metadata:
name: argocd-route
spec:
http:
- name: argocd-https
match:
hosts:
- argocd.example.com
paths:
- /*
backends:
- serviceName: argocd-server
servicePort: 80
plugins:
- name: proxy-rewrite
enable: true
config:
scheme: https
tls:
secretName: argocd-tls
优势:
- 支持动态证书加载
- 可添加 WAF 等安全插件
- 流量监控更完善
4. 混合环境下的访问策略设计
4.1 网络拓扑规划建议
code复制 +---------------------+
| External DNS |
+----------+----------+
|
+-----------v-----------+
| Cloud Load Balancer |
+-----------+-----------+
|
+---------------v---------------+
| Ingress |
| (TLS Termination & Routing) |
+---------------+---------------+
|
+---------------v---------------+
| Cluster Network |
| +---------+ +---------+ |
| | ArgoCD | | Other | |
| | Server | | Apps | |
| +---------+ +---------+ |
+-------------------------------+
4.2 多环境配置模板
values.yaml 片段示例:
yaml复制server:
ingress:
enabled: true
annotations:
nginx.ingress.kubernetes.io/backend-protocol: "HTTP"
hosts:
- argocd-dev.example.com
tls:
- secretName: argocd-dev-tls
hosts:
- argocd-dev.example.com
path: /
环境差异化方案:
- 开发环境:HTTP + 自签证书
- 测试环境:HTTPS + 内部 CA
- 生产环境:HTTPS + 商业证书 + WAF
4.3 安全加固措施
-
IP 白名单:
yaml复制nginx.ingress.kubernetes.io/whitelist-source-range: "192.168.1.0/24,10.0.0.0/8" -
访问日志审计:
yaml复制nginx.ingress.kubernetes.io/enable-access-log: "true" nginx.ingress.kubernetes.io/configuration-snippet: | log_format argocd_log '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent"'; -
速率限制:
yaml复制nginx.ingress.kubernetes.io/limit-rpm: "60"
5. 客户端访问的实践技巧
5.1 CLI 工具配置优化
避免每次输入完整 URL:
bash复制argocd login argocd.example.com --grpc-web
持久化配置:
bash复制argocd context add argocd-prod \
--server argocd.example.com \
--insecure \
--grpc-web
5.2 浏览器访问问题解决
证书错误处理:
- 自签证书需要手动导入到信任库
- Chrome 强制 HTTPS 问题:访问
chrome://flags/#allow-insecure-localhost启用选项
跨域问题:
在 Ingress 添加 CORS 注解:
yaml复制nginx.ingress.kubernetes.io/enable-cors: "true"
nginx.ingress.kubernetes.io/cors-allow-origin: "*"
5.3 移动端适配方案
- 响应式 UI:ArgoCD 2.4+ 版本已优化移动布局
- API 访问:
bash复制curl -k https://argocd.example.com/api/v1/applications \ -H "Authorization: Bearer $TOKEN" - PWA 应用:通过 manifest.json 配置实现桌面快捷方式
6. 监控与维护要点
6.1 健康检查配置
就绪探针示例:
yaml复制readinessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 5
periodSeconds: 10
自定义健康端点:
bash复制argocd admin settings status --grpc-web \
--server argocd.example.com
6.2 性能监控指标
Prometheus 抓取配置:
yaml复制metrics:
enabled: true
serviceMonitor:
enabled: true
interval: 30s
关键监控项:
argocd_app_k8s_request_total:Kubernetes API 调用次数argocd_repo_request_duration_seconds:Git 仓库同步耗时argocd_redis_request_duration_seconds:Redis 操作延迟
6.3 证书自动续期检查
cert-manager 状态验证:
bash复制kubectl get certificaterequest -n argocd
kubectl describe certificate argocd-tls -n argocd
设置到期告警:
bash复制kube-prometheus-stack:
alertmanager:
config:
receivers:
- name: ssl-expiry
email_configs:
- to: admin@example.com
send_resolved: true
7. 架构演进建议
7.1 多集群访问方案
通过 argocd-application-controller 配置:
yaml复制configs:
clusterCredentials:
- name: cluster-1
server: https://kubernetes.default.svc
config:
bearerToken: <token>
tlsClientConfig:
insecure: false
7.2 高可用部署模式
拓扑调整:
code复制 +-----------------+
| Redis HA |
| Sentinel Mode |
+--------+--------+
|
+----------------v----------------+
| ArgoCD |
| +-------------+ +-------------+|
| | API Server | | Repo Server ||
| | (3 replicas)| | (2 replicas)||
| +-------------+ +-------------+|
+--------------------------------+
7.3 未来兼容性设计
- HTTP/3 支持:
yaml复制nginx.ingress.kubernetes.io/http3: "true" - mTLS 双向认证:
yaml复制nginx.ingress.kubernetes.io/auth-tls-verify-client: "on" nginx.ingress.kubernetes.io/auth-tls-secret: "argocd-mtls"
实际部署中,建议先在内网环境验证 HTTP 配置,再逐步升级到外网 HTTPS 方案。遇到 502 错误时,重点检查 Service 到 Pod 的连通性以及证书的 SAN 列表是否包含当前域名
