You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过现有Kubernetes Ingress Controller暴露Argo CD UI

解决跨命名空间通过Ingress Controller暴露Argo CD服务的问题

Ingress资源本身支持跨命名空间访问服务,你只需要在配置中明确指定目标服务的命名空间,或者使用服务的全限定域名(FQDN)即可。以下是具体的实现步骤:

1. 确认Ingress Controller权限(可选)

默认情况下,ingress-nginx的ClusterRole已经包含访问所有命名空间服务的权限(services: get, list, watch等),可以通过以下命令验证:

kubectl describe clusterrole ingress-nginx

如果权限不足,需要补充对应的ClusterRoleBinding,但通常不需要额外操作。

2. 编写Ingress配置文件

方式一:指定服务命名空间(K8s 1.18+推荐)

在Ingress规则的backend.service字段中添加namespace属性,明确指定argocd-server所在的命名空间:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: argocd-ingress
  namespace: argocd
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"  # Argo CD Server默认用HTTPS
spec:
  ingressClassName: nginx  # 确保与你的Ingress Controller的class名称一致
  tls:
  - hosts:
    - argocd.your-domain.com  # 替换为你的域名
    secretName: argocd-tls-secret  # 提前创建的TLS证书Secret,若用HTTP可删除tls块
  rules:
  - host: argocd.your-domain.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: argocd-server
            namespace: argocd  # 这里指定服务所在的命名空间

方式二:使用服务FQDN(兼容旧版K8s)

如果你的K8s版本低于1.18,无法直接指定namespace字段,可以使用服务的全限定域名:argocd-server.argocd.svc.cluster.local,配置如下:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: argocd-ingress
  namespace: argocd
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
spec:
  ingressClassName: nginx
  tls:
  - hosts:
    - argocd.your-domain.com
    secretName: argocd-tls-secret
  rules:
  - host: argocd.your-domain.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: argocd-server.argocd.svc.cluster.local
            port:
              number: 443

3. 应用配置并验证

  • 应用Ingress资源:
kubectl apply -f argocd-ingress.yaml
  • 检查Ingress状态,确认ADDRESS字段为你的Droplet公网IP:
kubectl get ingress -n argocd
  • 查看Ingress Controller日志,排查可能的错误:
kubectl logs -n ingress-nginx -l app.kubernetes.io/name=ingress-nginx
  • 测试访问:在浏览器中打开https://argocd.your-domain.com,或用curl命令验证

注意事项

  • 确保你的域名已正确解析到Droplet的公网IP
  • 若使用HTTP访问,需删除tls块并将ssl-redirect设为"false",同时修改backend-protocol为"HTTP"(不推荐生产环境使用)
  • 若使用自签名证书,客户端需要信任该证书才能正常访问

内容的提问来源于stack exchange,提问作者Dimes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 12:41:11