When using Argo CD, a core tool for Kubernetes operations, there are moments when you need more granular control than just manifest deployment.
Today, we will clarify misunderstandings about AppProject’s Destination rules that you’ve asked about, and deeply explore Argo CD’s advanced features: workloadRef, sourceRepos, ignoreDifferences, and Slack notification settings, so you can immediately apply them in practice! π
Hello! Today, I’m going to thoroughly organize the complex configurations you might encounter while using Argo CD. Let’s start with the answer to your specific question: “Which Destination setting is valid?”

0. Hold on! The Truth About AppProject Destination Rules π§
Let’s address the part where you experienced confusion in your question. The most important principle when defining destinations in Argo CD’s AppProject is the scope of wildcard (*) usage.
- Server URL: Partial match wildcards like https://team1-* are not supported. You typically need to specify * (all servers) or an exact URL.
- Namespace: * (all namespaces) is possible, but negative patterns (!) or complex regex patterns like !kube-system* are not fundamentally supported in the Destination field.
Therefore, a setting including namespace: “!kube-system*” becomes **Invalid** (not valid). (This is because Argo CD operates on a whitelist basis, managing only explicitly allowed lists.)
1. workloadRef: Argo’s Smart Way to Track Resources π
workloadRef is a feature visible in the status field of an Argo CD Application, which refers to which of the resources managed by the application is the ‘main workload’.
- Why use it? When using Custom Resources (CRDs), it helps Argo CD understand which resource indicates the status of the actual deployed service.
- How it works: Primarily, when integrated with resources like Rollouts, it specifies which Deployment or Rollout the Application represents.
2. spec.sourceRepos: The Start of Security, Whitelist Management π‘οΈ
Setting sourceRepos at the AppProject level is very important for security.
- Function: Restricts which Git repositories Applications belonging to this project can pull sources from.
- Practical Tip: While using * is convenient, when dividing projects by team, you must manage a whitelist to only allow Repo addresses from specific organizations.
π AppProject Configuration Example
YAML
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
name: team-alpha-project
namespace: argocd
spec:
# Apps in this project can only use Repos from the addresses below.
sourceRepos:
- 'https://github.com/my-org/team-alpha-apps.git'
- 'https://github.com/my-org/shared-charts.git'
destinations:
- namespace: 'alpha-*' # Wildcards can be used
server: 'https://kubernetes.default.svc'
3. ignoreDifferences: Ignoring “Intended Differences” π
Some Kubernetes resources have fields whose values automatically change after deployment by the system. Argo CD considers these ‘OutOfSync’, and ignoreDifferences prevents this.
- Main targets: * Deployment replicas controlled by HPA
- Admission Controller by which sidecar containers or annotations are injected
- Service’s external-ip, etc.
π Application Configuration Example
YAML
spec:
ignoreDifferences:
- group: apps
kind: Deployment
jsonPointers:
- /spec/replicas # Ignored even if different from Git because HPA manages it
- group: ""
kind: Service
name: my-service
jsonPointers:
- /metadata/annotations/last-updated # Ignore specific annotations
4. Notifications: Receiving Deployment Results via Slack π’
Using the notifications.argoproj.io/subscribe.on-sync-succeeded.slack annotation allows you to send immediate Slack notifications upon successful deployment.
- How it works: The Argo CD Notifications controller monitors the Application’s status, and when a Sync Succeeded event occurs, it sends a message to the configured channel.
π Practical Application (Application YAML)
YAML
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: production-api
annotations:
# Send Slack notification to 'dev-alerts' channel on success
notifications.argoproj.io/subscribe.on-sync-succeeded.slack: dev-alerts
# Want to receive on failure too?
notifications.argoproj.io/subscribe.on-sync-failed.slack: dev-alerts
spec:
project: default
# ... omitted
5. Summary and Practical Checklist π
| Feature | Key Summary | Caution |
| — | — | — |
| AppProject Dest. | Manage server/namespace allowlist | Negative patterns (!) not allowed, partial wildcard for server URL not allowed |
| workloadRef | Specify reference relationship between resources | Useful when creating custom controllers |
| sourceRepos | Restrict available Git Repos | Adhere to the principle of least privilege for security |
| ignoreDifferences | Prevent unnecessary OutOfSync | Accurately write jsonPointers paths |
| Slack Noti. | Share real-time deployment status | Slack Token setup within Argo CD must precede |
—
Argo CD is more than just a deployment tool; it’s a powerful governance tool for managing cluster state. By combining the features learned today, you’ll be able to build a safer and more convenient GitOps environment! π οΈ
Leave a Reply