K3s上安装ArgoCD
在K8s服务器上运行以下命令安装Argo CD:
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
安装配置清单中包含的ClusterRoleBinding资源引用了argocd
名称空间。 如果要将Argo CD安装到不同的名称空间,请确保更新名称空间引用。
创建Ingress
Argo CD的service默认为ClusterIP,官方文档中也描述了配置LoadBalancer的方式(详见参考资料),如果需要通过域名访问Argo CD,需要创建Ingress资源。以下是一个Traefik Ingress的示例:
# ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: argocd-ingress
namespace: argocd
annotations:
cert-manager.io/cluster-issuer: letsencrypt-production # 注意这里使用了lets encrypt的证书
kubernetes.io/ingress.class: traefik
spec:
tls:
- hosts:
- <your-domain>
secretName: <your-cert> # 给证书起个名字,绑定TLS证书(由 cert-manager 创建)
rules:
- host: <your-domain>
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: argocd-server
port:
number: 80 # 代理到 argocd-server 的 80 端口
应用ingress
kubectl apply -f ingress.yaml
问题
通常这个时候还不能正常访问,因为argocd默认使用了自签名证书,并强制通过https进行访问,这个时候直接访问极大可能会出现无限重定向。Argo CD官方文 档中有详细的介绍证书相关的文档。这里重点介绍--insecure(完全禁用 TLS)选项,因为Ingress上已经配置了证书,所以这里直接使用--insecure
选项即可。
修改Argo CD配置
kubectl edit configmap argocd-cmd-params-cm -n argocd -o yaml
在配置文件中添加
data:
server.insecure: "true"
完整内容如下:
apiVersion: v1
data:
server.insecure: "true"
kind: ConfigMap
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"v1","kind":"ConfigMap","metadata":{"annotations":{},"labels":{"app.kubernetes.io/name":"argocd-cmd-params-cm","app.kubernetes.io/part-of":"argocd"},"name":"ar
creationTimestamp: "2025-03-21T08:20:18Z"
labels:
app.kubernetes.io/name: argocd-cmd-params-cm
app.kubernetes.io/part-of: argocd
name: argocd-cmd-params-cm
namespace: argocd
resourceVersion: "282649"
uid: e28d7e71-63f8-4232-9e7e-78f1bdbc3c5e