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

如何在ArgoCD的PreSync和PostSync阶段更新同一NetworkPolicy对象?

解决同一NetworkPolicy在ArgoCD PreSync/PostSync阶段分别更新的问题

Kustomize会合并同名同类型的资源,直接修改同一个NetworkPolicy的hook注解只会保留最后一次配置。要实现两次更新,有两种可行方案:

方案1:通过独立Hook Job执行kubectl命令

创建两个独立的Job资源,分别绑定PreSync和PostSync钩子,通过kubectl命令直接修改目标NetworkPolicy。

示例配置:

PreSync阶段的更新Job

apiVersion: batch/v1
kind: Job
metadata:
  name: update-networkpolicy-presync
  annotations:
    argocd.argoproj.io/hook: PreSync
    argocd.argoproj.io/hook-delete-policy: HookSucceeded # 执行成功后自动删除Job
spec:
  template:
    spec:
      restartPolicy: OnFailure
      containers:
      - name: kubectl
        image: bitnami/kubectl:latest
        command:
        - kubectl
        - patch
        - networkpolicy
        - <你的NetworkPolicy名称>
        - -n
        - <目标命名空间>
        - -p
        - '{"spec": {"ingress": [{"from": [{"ipBlock": {"cidr": "10.0.0.0/24"}}]}]}}' # PreSync阶段需要的配置

PostSync阶段的更新Job

apiVersion: batch/v1
kind: Job
metadata:
  name: update-networkpolicy-postsync
  annotations:
    argocd.argoproj.io/hook: PostSync
    argocd.argoproj.io/hook-delete-policy: HookSucceeded
spec:
  template:
    spec:
      restartPolicy: OnFailure
      containers:
      - name: kubectl
        image: bitnami/kubectl:latest
        command:
        - kubectl
        - patch
        - networkpolicy
        - <你的NetworkPolicy名称>
        - -n
        - <目标命名空间>
        - -p
        - '{"spec": {"ingress": [{"from": [{"ipBlock": {"cidr": "192.168.0.0/24"}}]}]}}' # PostSync阶段需要的配置

将这两个Job加入Kustomize的resources列表即可,Kustomize不会合并它们,ArgoCD会在对应阶段执行。

方案2:生成带后缀的NetworkPolicy变体 + Hook删除策略

基于基础NetworkPolicy生成两个带名称后缀的变体,分别绑定PreSync和PostSync钩子,利用Hook删除策略让PreSync版本执行后自动删除,最终保留PostSync版本。

示例配置:

基础NetworkPolicy(base/networkpolicy.yaml)

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: my-networkpolicy
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: my-app
  policyTypes:
  - Ingress

Kustomization.yaml配置

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
- base/networkpolicy.yaml

# PreSync阶段的变体
patches:
- target:
    kind: NetworkPolicy
    name: my-networkpolicy
  patch: |-
    - op: add
      path: /metadata/name
      value: my-networkpolicy-presync
    - op: add
      path: /metadata/annotations/argocd.argoproj.io~1hook
      value: PreSync
    - op: add
      path: /metadata/annotations/argocd.argoproj.io~1hook-delete-policy
      value: HookSucceeded
    - op: replace
      path: /spec/ingress
      value:
      - from:
        - ipBlock:
            cidr: 10.0.0.0/24

# PostSync阶段的变体
- target:
    kind: NetworkPolicy
    name: my-networkpolicy
  patch: |-
    - op: add
      path: /metadata/name
      value: my-networkpolicy-postsync
    - op: add
      path: /metadata/annotations/argocd.argoproj.io~1hook
      value: PostSync
    - op: replace
      path: /spec/ingress
      value:
      - from:
        - ipBlock:
            cidr: 192.168.0.0/24

这个方案中,PreSync版本会在同步前创建并应用,执行成功后自动删除;PostSync版本会在同步完成后创建,作为最终的NetworkPolicy配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 06:12:28