Linkerd 2.18에서 Gateway API 소유권 마이그레이션
Linkerd는 Gateway API를 핵심 구성 메커니즘으로 사용해요. Linkerd 2.18 이전에는 Linkerd가 선택적으로 클러스터에 Gateway API 유형을 설치하고 스스로 관리했어요. 즉 선택적으로 그 유형을 "소유"했죠. Linkerd 2.19부터는 Linkerd가 더 이상 사용자를 대신해 Gateway API 유형을 소유하지 않아요. 따라서 Linkerd 2.18 자체가 전환(transition) 릴리스예요. 이 버전에서 Linkerd가 설치한 Gateway API 리소스의 소유권을 제거해야 해요.
본문
Linkerd 관리형 Gateway API CRD를 가진 상태로 2.18로 업그레이드하는 모든 Linkerd 사용자는 아래 단계를 따라 이 소유권을 Linkerd에서 넘겨야 해요.
이 API에 의존하는 CR을 보존하면서 Linkerd 관리형 Gateway API에서 외부 관리형으로 마이그레이션하려면, 설치 방법에 따라 아래 단계를 따르세요.
Linkerd가 현재 Gateway API CRD를 소유하고 있는지 확인하기
Linkerd가 Gateway API CRD를 소유하는지 확인하려면 다음을 실행하세요:
kubectl get crds/httproutes.gateway.networking.k8s.io -ojsonpath='{.metadata.annotations.linkerd\.io/created-by}'
이 명령어가 NotFound 오류를 반환하면 CRD가 설치되지 않은 것이에요. 빈 결과를 반환하면 CRD가 Linkerd에 의해 관리되지 않는 것이에요. "linkerd"를 포함한 문자열을 반환하면 CRD가 Linkerd에 의해 관리되고 있는 것이에요.
CLI로 Linkerd를 설치한 경우
Linkerd 2.18부터 linkerd upgrade --crds 명령어는 진행하기 전에 클러스터의 기존 Gateway API CRD를 확인하고 이를 덮어쓰지 않아요. 이 CRD의 소유권을 외부 소스로 넘기려면, Linkerd 2.18로 업그레이드하기 전에 외부 제공 CRD를 설치하세요:
kubectl apply -f \
https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.2.1/standard-install.yaml
다음으로 평소와 같은 업그레이드 명령어를 실행하세요:
linkerd upgrade --crds | kubectl apply -f -
이 과정은 Linkerd의 다른 non-Gateway API CRD에 업데이트를 적용하면서도 외부 제공 Gateway API CRD는 건드리지 않도록 보장해요.
Helm으로 Linkerd를 설치한 경우
CLI와 달리 Helm의 업그레이드 과정은 클러스터의 Gateway API 상태를 동적으로 확인할 수 없어서, 마이그레이션 단계가 약간 달라요. 먼저 평소처럼 linkerd-crds 차트를 업그레이드하세요 (사용한 helm 릴리스 이름과 repo 이름에 맞게 수정):
# Don't include --set installGatewayAPI=false here! See the warning below.
helm upgrade -n linkerd linkerd-crds linkerd/linkerd-crds
경고
이 단계에서는 --set installGatewayAPI=false를 포함하지 마세요. Gateway API CRD와 연결된 CR을 삭제해서 정의된 정책과 라우트를 망가뜨리게 돼요.
2.18 버전에서 이 업그레이드는 Linkerd 제공 Gateway API CRD에 helm.sh/resource-policy: keep 어노테이션을 달아요. 이 어노테이션은 linkerd-crds 차트가 향후 업데이트에서 CRD와 그 CR을 제거하지 못하게 해요.
다음으로 Linkerd의 CRD를 외부 관리형 CRD로 덮어쓰세요:
kubectl apply -f \
https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.2.1/standard-install.yaml
이후의 모든 구성 업데이트나 차트 업그레이드에서는 --set installGatewayAPI=false를 사용해서 Gateway API CRD가 외부 관리형으로 유지되게 하세요. 2.19 버전부터는 이것이 기본값이 돼요. helm.sh/resource-policy: keep 어노테이션은 이 설정과 무관하게 CRD가 유지되도록 보장해요.