GKE 노드에서 containerd 구성 맞춤설정


이 페이지에서는 Google Kubernetes Engine(GKE) 노드에서 containerd 컨테이너 런타임 구성을 맞춤설정하는 방법을 보여줍니다. 이미 컨테이너 런타임의 정의와 맞춤설정해야 하는 이유를 잘 알고 있어야 합니다.

GKE의 containerd 구성 정보

Container-Optimized OS와 같은 운영체제를 실행하는 GKE 노드의 containerd 런타임에서 옵션 집합을 수동으로 구성할 수 있습니다. 런타임을 맞춤설정하면 비공개 이미지 레지스트리에 액세스와 같은 특별한 요구사항을 구성할 수 있습니다. 이러한 옵션을 설정하려면 런타임 구성 파일이라는 YAML 파일을 만들고 클러스터를 만들거나 업데이트할 때 이 파일을 GKE에 전달합니다.

이러한 containerd 맞춤설정 방법을 사용하면 보안 위험인 권한이 있는 DaemonSet 배포를 방지할 수 있습니다. GKE에 런타임 구성 파일을 제공하면 GKE에서 노드를 다시 만들고 구성을 사용하여 모든 노드에서 containerd config.toml 파일을 업데이트합니다. 구성은 노드 종료, 업그레이드, 재생성 동안 유지됩니다.

런타임 구성 파일을 사용하면 containerd의 옵션만 구성할 수 있습니다. 또한 GKE에서 노드 시스템 구성 파일이라는 별도의 파일을 사용하여 특정 kubelet 옵션과 하위 수준 Linux 커널 옵션을 구성할 수 있습니다. 자세한 내용은 노드 시스템 구성 맞춤설정을 참조하세요.

제한사항

런타임 구성 파일을 사용하여 Ubuntu 노드 이미지의 containerd 설정을 변경할 수 없습니다. containerd를 포함한 Container-Optimized OS만 지원됩니다. 이는 모든 GKE 클러스터의 기본 노드 이미지입니다.

사용 가능한 containerd 구성 옵션

다음 표에서는 런타임 구성 파일을 사용하여 구성할 수 있는 옵션을 설명합니다.

런타임 구성 파일 옵션

Secret Manager에 저장하는 비공개 사용자 인증 정보를 사용하여 비공개 이미지 레지스트리에 액세스합니다.

자세한 내용은 비공개 CA 인증서로 비공개 레지스트리에 액세스를 참조하세요.


privateRegistryAccessConfig:
  enabled: true
  certificateAuthorityDomainConfig:
  - gcpSecretManagerCertificateConfig:
      secretURI: "SECRET_LOCATION"
    fqdns:
    - "FQDN1"
    - "FQDN2"

이 구성에는 다음 필드가 포함됩니다.

  • enabled: true: 비공개 레지스트리 구성을 사용 설정합니다. enabled: false를 설정한 경우 privateRegistryAccessConfig 항목의 다른 필드를 삭제합니다.
  • certificateAuthorityDomainConfig: 인증서 최대 5개와 FQDN 정의를 포함합니다.
  • gcpSecretManagerCertificateConfig: Secret Manager에 저장된 인증서와 FQDN 배열을 포함합니다.
  • secretURI: Secret Manager에서의 인증서 위치입니다.
  • fqdns: 비공개 레지스트리의 정규화된 도메인 이름 목록입니다. IPv4 주소도 사용할 수 있지만 FQDN을 사용하는 것이 좋습니다.

새 클러스터에 containerd 구성 적용

이 섹션에서는 새 GKE 클러스터를 만들 때 containerd 구성 파일을 적용하는 방법을 보여줍니다.

다음 명령어를 실행합니다.

gcloud container clusters create-auto CLUSTER_NAME \
    --location=LOCATION \
    --scopes="cloud-platform" \
    --containerd-config-from-file="PATH_TO_CONFIG_FILE"

다음을 바꿉니다.

  • CLUSTER_NAME: 새 클러스터의 이름
  • LOCATION: 새 클러스터의 Compute Engine 위치
  • PATH_TO_CONFIG_FILE: 생성된 구성 파일의 경로(예: ~/containerd-configuration.yaml)

같은 옵션으로 gcloud container clusters create 명령어를 실행하여 새 표준 클러스터에서 비공개 레지스트리 구성을 사용 설정할 수 있습니다.

기존 클러스터에 containerd 구성 적용

이 섹션에서는 기존 클러스터와 노드에 containerd 구성을 적용하는 방법을 보여줍니다.

액세스 범위 확인

이 기능을 사용하려면 기존 클러스터에 cloud-platform 액세스 범위가 있어야 합니다. 이 섹션에서는 액세스 범위를 확인하고 새롭거나 수정된 비공개 레지스트리 구성 파일로 기존 클러스터를 업데이트하는 방법을 보여줍니다.

새 클러스터의 기본 액세스 범위에 대한 자세한 내용은 GKE의 액세스 범위를 참조하세요.

Autopilot 액세스 범위 확인

다음 명령어를 실행합니다.

gcloud container clusters describe CLUSTER_NAME \
    --location=LOCATION \
    --flatten=nodeConfig \
    --format='csv[delimiter="\\n",no-heading](oauthScopes)'

클러스터에 http://www.googleapis.com/auth/cloud-platform 액세스 범위가 없으면 이 액세스 범위로 새 클러스터를 만듭니다.

표준 액세스 범위 확인

표준 클러스터 액세스 범위를 확인하려면 노드 풀을 확인합니다.

gcloud container node-pools describe NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --location=LOCATION \
    --flatten=nodeConfig \
    --format='csv[delimiter="\\n",no-heading](oauthScopes)'

NODE_POOL_NAME을 노드 풀의 이름으로 바꿉니다.

클러스터에 http://www.googleapis.com/auth/cloud-platform 액세스 범위가 없으면 cloud-platform 액세스 범위로 새 노드 풀을 만들고 기존 노드 풀을 삭제합니다.

구성 파일을 사용하도록 클러스터 업데이트

다음 명령어를 실행합니다.

gcloud container clusters update CLUSTER_NAME \
    --location=LOCATION \
    --containerd-config-from-file="PATH_TO_CONFIG_FILE"

표준 클러스터에서 노드 다시 만들기

표준 클러스터에서 자동 업그레이드를 사용하지 않는 경우에 노드 풀을 수동으로 다시 만들어 새 구성을 적용해야 합니다. 수동으로 노드 다시 만들기를 트리거하려면 클러스터를 이미 사용 중인 같은 GKE 버전으로 업그레이드합니다.

gcloud container clusters upgrade CLUSTER_NAME \
    --location=LOCATION \
    --cluster-version=VERSION

VERSION을 클러스터에서 이미 사용 중인 같은 GKE 패치 버전으로 바꿉니다.

containerd 구성 옵션 중지

커스텀 구성을 삭제하려면 다음을 수행합니다.

  1. 다음 예시와 같이 구성 파일을 업데이트하여 중지하려는 구성 항목에서 enabled: false를 지정하고 항목의 다른 모든 필드를 삭제합니다.

    privateRegistryAccessConfig:
      enabled: false
  2. 업데이트된 구성 파일을 클러스터에 적용합니다. 자세한 내용은 기존 클러스터에 containerd 구성 적용을 참조하세요.