mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5mobile wallpaper 6
1172 字
6 分钟
ArgoCD 在阿里云 ACK 集群的部署

ArgoCD 在阿里云 ACK 集群的部署#

参考阿里云官方文档:https://help.aliyun.com/zh/cs/user-guide/argo-cd-based-gitops-best-practices

本文覆盖以下部署场景:

访问方式适用场景
argocd-server SVC LoadBalancer快速验证,直接绑定公网 CLB
Nginx Ingress 公网访问通过 Ingress 统一管理,CLB 公网
Nginx Ingress 内网访问仅内网访问,CLB 私网

1. 准备 SSL 证书#

1.1 自签名ssl证书#

本文使用自定义域名和自签名证书,如是生产环境,建议购买域名和对应的证书。

自签名证书参考:https://docs.rancher.cn/docs/rancher2.5/installation/resources/advanced/self-signed-ssl/

1.2 创建 TLS Secret#

ArgoCD 要求 TLS Secret 名称必须为 argocd-server-tls

# 创建命名空间
kubectl create namespace argo-cd
# 创建 TLS Secret
kubectl create secret tls argocd-server-tls \
--cert=/path/to/tls.crt \
--key=/path/to/tls.key \
-n argo-cd

示例:

kubectl create secret tls argocd-server-tls \
--cert=/home/user/ca/tls.crt \
--key=/home/user/ca/tls.key \
-n argo-cd

验证:

kubectl get secrets -n argo-cd

2. Helm 部署 ArgoCD#

2.1 准备 Helm Chart#

# 添加 Helm Repo
helm repo add argo https://argoproj.github.io/argo-helm
helm repo update
# (可选)下载 Chart 到本地
helm pull argo/argo-cd --version 7.3.5
# (可选)解压 Chart
mkdir chart && tar -zxvf argo-cd-7.3.5.tgz -C chart/

2.2 获取 IngressClass 名称#

部署 Ingress 前,确认集群中可用的 IngressClass:

kubectl get ingressclass

期望输出(ACK 集群默认):

NAME CONTROLLER PARAMETERS AGE
nginx k8s.io/ingress-nginx <none> 17h

2.3 方式一:helm —set 命令安装#

适合快速部署,所有参数内联在命令中。

(a)仅 SVC 暴露,不启用 Ingress:

helm upgrade --install argocd argo/argo-cd --version 7.3.5 \
--namespace argo-cd \
--create-namespace \
--set server.service.https.enabled=true \
--set server.service.https.tlsSecret.name=argocd-server-tls

(b)启用 Ingress:

helm upgrade --install argocd argo/argo-cd --version 7.3.5 \
--namespace argo-cd \
--create-namespace \
--set server.ingress.enabled=true \
--set server.ingress.controller="generic" \
--set server.ingress.ingressClassName="nginx" \
--set server.ingress.hostname="argocd.hua-ri.cn" \
--set server.ingress.path="/" \
--set server.ingress.pathType="Prefix" \
--set server.ingress.annotations."nginx\.ingress\.kubernetes\.io/backend-protocol"="HTTPS" \
--set server.ingress.annotations."nginx\.ingress\.kubernetes\.io/ssl-redirect"="true" \
--set server.ingress.annotations."nginx\.ingress\.kubernetes\.io/force-ssl-redirect"="true" \
--set server.ingress.tls=true \
--set global.domain="argocd.hua-ri.cn"

如果网络有问题,从本地 Chart 安装:

helm upgrade --install argocd ./argo-cd-7.3.5.tgz \
--namespace argo-cd \
--create-namespace \
--set server.ingress.enabled=true \
--set server.ingress.controller="generic" \
--set server.ingress.ingressClassName="nginx" \
--set server.ingress.hostname="argocd.hua-ri.cn" \
--set server.ingress.path="/" \
--set server.ingress.pathType="Prefix" \
--set server.ingress.annotations."nginx\.ingress\.kubernetes\.io/backend-protocol"="HTTPS" \
--set server.ingress.annotations."nginx\.ingress\.kubernetes\.io/ssl-redirect"="true" \
--set server.ingress.annotations."nginx\.ingress\.kubernetes\.io/force-ssl-redirect"="true" \
--set server.ingress.tls=true \
--set global.domain="argocd.hua-ri.cn"

2.4 方式二:helm -f values.yaml 文件安装#

适合生产环境,配置集中管理、便于版本控制。

创建 customs.yaml

## Globally shared configuration
global:
domain: argocd.hua-ri.cn
## Server
server:
replicas: 1
ingress:
enabled: true
controller: generic
ingressClassName: "nginx"
hostname: "argocd.hua-ri.cn"
path: /
pathType: Prefix
annotations:
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
nginx.ingress.kubernetes.io/ssl-redirect: "true"
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
tls: true

执行安装:

# 在线安装
helm upgrade --install argocd argo/argo-cd --version 7.3.5 \
--namespace argo-cd \
--create-namespace \
-f customs.yaml
# 本地 Chart 安装
helm upgrade --install argocd ./argo-cd-7.3.5.tgz \
--namespace argo-cd \
--create-namespace \
-f customs.yaml

2.5 卸载 ArgoCD#

简单卸载(保留 CRD):

helm uninstall argocd --namespace argo-cd

完全卸载:

helm uninstall argocd --namespace argo-cd
kubectl delete namespace argo-cd
kubectl delete clusterrole argocd-server
kubectl delete clusterrolebinding argocd-server
kubectl delete crd applications.argoproj.io appprojects.argoproj.io applicationsets.argoproj.io

3. 配置访问入口#

3.1 方式一:argocd-server SVC LoadBalancer(直接公网)#

适合快速验证,直接将 argocd-server Service 类型改为 LoadBalancer,由阿里云自动绑定公网 CLB。

# 将 argocd-server Service 改为 LoadBalancer
kubectl patch svc argocd-server -n argo-cd -p '{"spec": {"type": "LoadBalancer"}}'
# 查看分配的公网 IP
kubectl get svc -n argo-cd argocd-server

期望输出:

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
argocd-server LoadBalancer x.x.x.x x.x.x.x 80/TCP,443/TCP 170m

获取到 EXTERNAL-IP 后,配置域名解析即可访问。

3.2 方式二:通过 Nginx Ingress 访问(推荐)#

通过 Nginx Ingress Controller 统一管理入口,支持公网和内网两种模式。

ACK 集群主要使用以下三个 Annotation 控制 CLB 行为:

Annotation说明
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-typeinternet(公网)或 intranet(私网)
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners"true" 覆盖现有 CLB 监听;"false" 不覆盖
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id指定绑定的 CLB 实例 ID

先查看 Ingress Controller SVC 当前的 Annotation 配置:

kubectl get svc -n nginx-ingress nginx-ingress-ack-ack-ingress-nginx-v1-controller -oyaml | \
grep -E "alibaba-cloud-loadbalancer-(address-type|force-override-listeners|id)"

(a)公网访问配置:

nginx-ingress-ack-ack-ingress-nginx-v1-controller 的 SVC 上添加/更新以下 Annotation:

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: internet
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners: "true"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: <公网CLB实例ID>

在负载均衡控制台查询 CLB 实例 ID:https://slb.console.aliyun.com/overview

(b)内网访问配置:

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: intranet
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners: "true"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: <内网CLB实例ID>

(c)通用操作:

如果 SVC 当前类型为 NodePort,直接改为 LoadBalancer:

kubectl patch svc nginx-ingress-ack-ack-ingress-nginx-v1-controller -n nginx-ingress \
-p '{"spec": {"type": "LoadBalancer"}}'

如果 SVC 已经是 LoadBalancer 类型,但需要从公网切换到内网(反之亦然),需要先切回 NodePort 再改为 LoadBalancer,否则 EXTERNAL-IP 的类型不会更新:

kubectl patch svc nginx-ingress-ack-ack-ingress-nginx-v1-controller -n nginx-ingress \
-p '{"spec": {"type": "NodePort"}}'
kubectl patch svc nginx-ingress-ack-ack-ingress-nginx-v1-controller -n nginx-ingress \
-p '{"spec": {"type": "LoadBalancer"}}'

查看 Ingress Controller 实际分配的 IP:

kubectl get svc -n nginx-ingress

期望输出:

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-ingress-ack-ingress-nginx-controller-admission ClusterIP 172.27.120.238 <none> 443/TCP 15d
nginx-ingress-ack-ingress-nginx-controller-internal LoadBalancer 172.27.115.18 x.x.x.x 80:31840/TCP,443:30799/TCP 15d

将域名解析到 EXTERNAL-IP(本地测试可写入 /etc/hosts,生产环境配置 DNS 解析):

x.x.x.x argocd.hua-ri.cn

4. 安装 ArgoCD CLI#

# macOS
brew install argocd

更多平台安装方式参见:cli_installation


5. 访问 ArgoCD#

5.1 获取初始管理员密码#

kubectl get secret -n argo-cd argocd-initial-admin-secret \
-o jsonpath="{.data.password}" | base64 -d

5.2 浏览器访问#

打开浏览器访问 https://argocd.hua-ri.cn,使用用户名 admin 和上一步获取的密码登录。

注意:使用自签名证书时,浏览器会提示”不安全”,点击继续访问即可。使用正式购买的证书则不会有此提示。

5.3 CLI 登录#

# 通过域名登录
argocd login argocd.hua-ri.cn
# 或通过 LoadBalancer IP 登录(方式一)
argocd login <EXTERNAL-IP>
Username: admin
Password: <初始密码>
'admin:login' logged in successfully
分享

如果这篇文章对你有帮助,欢迎分享给更多人!

ArgoCD 在阿里云 ACK 集群的部署
https://hua-ri.cn/posts/argocd在阿里云ack集群的部署/
作者
花日
发布于
2026-03-02
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时