Argo CD로 배포한 Cilium 문제 해결
Argo CD로 배포한 Cilium 문제 해결 (Troubleshooting Cilium deployed with Argo CD)
Argo CD로 Cilium을 배포할 때 사용자들이 겪은 알려진 이슈들과 해결 방법을 정리했어요. 같은 문제를 만났다면 여기 해답이 있을 거예요.
본문
Argo CD와 관련된 문제를 겪는 사용자 보고가 있었어요. 이 문서 페이지는 알려진 이슈 중 일부와 그 해결 방법을 정리해요.
Argo CD가 Cilium 커스텀 리소스를 삭제하는 문제
Argo CD로 Cilium을 배포할 때, 일부 사용자는 Cilium이 생성한 커스텀 리소스가 사라진다고 보고했어요. 이로 인해 다음과 같은 문제가 발생해요.
ciliumidnot found (GitHub 이슈 17614)
해결 방법 (Solution)
이 문제를 막으려면 다음 지침에 따라 Argo CD ConfigMap에 리소스 제외(resource exclusions)를 선언하세요.
다음은 예시 조각이에요.
resource.exclusions: |
- apiGroups:
- cilium.io
kinds:
- CiliumIdentity
clusters:
- "*"
Argo CD가 리소스를 영구적으로 out-of-sync로 표시하는 문제
-
hubble-generate-certs의 Argo CD Out-of-sync 이슈 (GitHub 이슈 14550)
-
Argo CD를 사용하는 Cilium의 Out-of-sync 이슈 (GitHub 이슈 18298)
해결 방법 (Solution)
다음 접근 방식 중 하나를 선택하면 돼요.
비멱등(non-idempotent) helm 생성기를 사용하는 리소스에는 argocd.argoproj.io/compare-options: IgnoreExtraneous 어노테이션을 추가해 이 문제를 피할 수 있어요. 이를 위해 Helm 값 nonIdempotentAnnotations를 사용할 수 있고, values 파일에 설정하면 돼요.
nonIdempotentAnnotations:
argocd.argoproj.io/compare-options: IgnoreExtraneous
인증서가 재생성될 때 "out of sync"가 발생하지 않도록 Argo CD 애플리케이션 정의에 제외(exclusions)를 설정할 수 있어요. 아래 예시는 Hubble용이지만, clustermesh에도 비슷한 시크릿이 있어요. 이들은 모두 cilium.io/helm-template-non-idempotent: "true"로 라벨링돼요.
ignoreDifferences:
- group: ""
kind: ConfigMap
name: hubble-ca-cert
jsonPointers:
- /data/ca.crt
- group: ""
kind: Secret
name: hubble-relay-client-certs
jsonPointers:
- /data/ca.crt
- /data/tls.crt
- /data/tls.key
- group: ""
kind: Secret
name: hubble-server-certs
jsonPointers:
- /data/ca.crt
- /data/tls.crt
- /data/tls.key
참고: 위 구성을 적용한 뒤에는 설정을 반영하려면 Argo CD 배포를 재시작해야 해요.
serviceMonitor를 활성화한 helm template이 실패하는 문제
일부 사용자는 Argo CD로 Cilium을 설치하고 serviceMonitor를 활성화한 채 helm template을 실행하면 실패한다고 보고했어요. Argo CD CLI가 배포 시 --api-versions 플래그를 Helm에 넘기지 않기 때문이에요.
해결 방법 (Solution)
이 풀 리퀘스트가 Argo CD의 v2.3.0 릴리스에서 이 문제를 수정했어요. Argo CD를 업그레이드하고 serviceMonitor를 활성화한 helm template이 여전히 실패하는지 확인해 보세요.
참고:
helm template을 사용할 때는 목표 Kubernetes 클러스터와 일치하는 값으로--kube-version과--api-versions를 설정하는 것을 강력히 권장해요. Cilium 같은 Helm 차트는 대상 클러스터에서 해당 Kubernetes 기능을 사용할 수 있는지(베타 vs 안정)에 따라 특정 기능을 조건부로 활성화하는 경우가 많아요.--api-versions=monitoring.coreos.com/v1을 지정하면helm template검증을 통과할 수 있어요.
위에 설명되지 않은 Argo CD 이슈가 있다면 GitHub의 Argo CD 관련 이슈 목록을 확인해 보세요. 관련 이슈를 찾을 수 없다면 새로 만들거나 Cilium Slack에서 도움을 구하세요.
Talos Linux에 배포한 Cilium 애플리케이션 차트가 "field not declared in schema"로 실패하는 문제
Argo CD로 Cilium을 Talos Linux에 배포할 때, 일부 사용자는 Talos 보안 구성 때문에 문제를 겪는다고 보고했어요. ArgoCD가 다음 메시지와 함께 애플리케이션 배포에 실패할 수 있어요.
Failed to compare desired state to live state: failed to calculate diff:
error calculating structured merge diff: error building typed value from live
resource: .spec.template.spec.securityContext.appArmorProfile: field not
declared in schema
해결 방법 (Solution)
Application의 syncPolicy.syncOptions 목록에 ServerSideApply=true 옵션을 추가하세요.
apiVersion: argoproj.io/v1alpha1
kind: Application
spec:
syncPolicy:
syncOptions:
- ServerSideApply=true
자세한 내용은 ArgoCD 문서를 참고하세요.