GKE의 DNS 문제 해결


이 페이지에서는 Google Kubernetes Engine(GKE) 클러스터에서 DNS 제공업체와 관련된 문제를 해결하는 방법을 보여줍니다.

추가 지원이 필요하면 Cloud Customer Care에 연락하세요.

GKE용 Cloud DNS 이벤트

이 섹션에서는 GKE의 일반적인 Cloud DNS 문제를 자세히 설명합니다.

Cloud DNS 중지됨

Cloud DNS API가 중지되면 다음과 같은 이벤트가 발생합니다.

Warning   FailedPrecondition        service/default-http-backend
Failed to send requests to Cloud DNS: Cloud DNS API Disabled. Please enable the Cloud DNS API in your project PROJECT_NAME: Cloud DNS API has not been used in project PROJECT_NUMBER before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/dns.googleapis.com/overview?project=PROJECT_NUMBER then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.

이 오류는 Cloud DNS API가 기본적으로 사용 설정되어 있지 않기 때문에 발생합니다. Cloud DNS API를 수동으로 사용 설정해야 합니다.

이 문제를 해결하려면 Cloud DNS API를 사용 설정합니다.

Cloud DNS에 요청을 전송할 수 없음: API 비율 한도 초과

다음 이벤트는 프로젝트가 Cloud DNS 할당량 또는 한도를 초과하면 발생합니다.

kube-system   27s         Warning   InsufficientQuota
managedzone/gke-cluster-quota-ee1bd2ca-dns     Failed to send requests to Cloud DNS: API rate limit exceeded. Contact Google Cloud support team to request a quota increase for your project PROJECT_NAME: Quota exceeded for quota metric 'Write requests' and limit 'Write limit for a minute for a region' of service 'dns.googleapis.com' for consumer 'project_number:PROJECT_NUMBER.

이 문제를 해결하려면 Cloud DNS 할당량Compute Engine 할당량 및 한도를 검토하세요. Google Cloud 콘솔을 사용하여 할당량을 늘릴 수 있습니다.

이전 오류로 인해 Cloud DNS에 요청을 전송할 수 없음

오류로 인해 연쇄 장애가 발생하면 다음과 같은 이벤트가 발생합니다.

kube-system   27s         Warning   InsufficientQuota
managedzone/gke-cluster-quota-ee1bd2ca-dns     Failed to send requests to Cloud DNS: API rate limit exceeded. Contact Google Cloud support team to request a quota increase for your project PROJECT_NAME: Quota exceeded for quota metric 'Write requests' and limit 'Write limit for a minute for a region' of service 'dns.googleapis.com' for consumer 'project_number:PROJECT_NUMBER.
kube-system   27s         Warning   FailedPrecondition               service/default-http-backend                         Failed to send requests to Cloud DNS due to a previous error. Please check the cluster events.

이 문제를 해결하려면 클러스터 이벤트를 확인하여 원래 오류의 원인을 찾고 안내에 따라 근본 문제를 해결합니다.

앞의 예시에서 관리형 영역에 대한 InsufficientQuota 오류는 연쇄 장애를 트리거했습니다. FailedPrecondition의 두 번째 오류는 초기 할당량 부족 문제인 이전 오류가 발생했음을 나타냅니다. 이 예시 문제를 해결하려면 Cloud DNS 할당량 오류 안내를 따르세요.

응답 정책을 바인딩할 수 없음

응답 정책이 클러스터의 네트워크에 바인딩되고 GKE용 Cloud DNS가 응답 정책을 네트워크에 바인딩하려고 할 때 다음과 같은 이벤트가 발생합니다.

kube-system   9s          Warning   FailedPrecondition               responsepolicy/gke-2949673445-rp
Failed to bind response policy gke-2949673445-rp to test. Please verify that another Response Policy is not already associated with the network: Network 'https://www.googleapis.com/compute/v1/projects/PROJECT_NAME/global/networks/NETWORK_NAME' cannot be bound to this response policy because it is already bound to another response policy.
kube-system   9s          Warning   FailedPrecondition               service/kube-dns
Failed to send requests to Cloud DNS due to a previous error. Please check the cluster events.

문제를 해결하려면 다음 단계를 수행합니다.

  1. 네트워크에 바인딩된 응답 정책을 가져옵니다.

    gcloud dns response-policies list --filter='networks.networkUrl: NETWORK_URL'
    

    NETWORK_URL을 오류의 네트워크 URL(예: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/NETWORK_NAME)로 바꿉니다.

    출력이 비어 있으면 응답 정책이 동일한 프로젝트에 없을 수 있습니다. 다음 단계를 진행하여 응답 정책을 검색합니다.

    출력이 다음과 비슷한 경우 4단계로 건너뛰고 응답 정책을 삭제합니다.

    [
       {
          "description": "Response Policy for GKE cluster \"CLUSTER_NAME\" with cluster suffix \"cluster.local.\" in project \"PROJECT_ID\" with scope \"CLUSTER_SCOPE\".",
          ...
          "kind": "dns#responsePolicy",
          "responsePolicyName": "gke-CLUSTER_NAME-POLICY_ID-rp"
       }
    ]
    
  2. IAM 정책 분석 도구를 사용하여 dns.networks.bindDNSResponsePolicy 권한이 있는 프로젝트 목록을 가져옵니다.

  3. 각 프로젝트에 네트워크에 바인딩된 응답 정책이 있는지 확인합니다.

    gcloud dns response-policies list --filter='networks.networkUrl:NETWORK_URL' \
        --project=PROJECT_NAME
    
  4. 응답 정책을 삭제합니다.

kube-dns에 잘못된 구성이 지정됨

GKE용 Cloud DNS에 잘못된 커스텀 kube-dns ConfigMap을 적용하면 다음과 같은 이벤트가 발생합니다.

kube-system   49s         Warning   FailedValidation                 configmap/kube-dns
Invalid configuration specified in kube-dns: error parsing stubDomains for ConfigMap kube-dns: dnsServer [8.8.8.256] validation: IP address "8.8.8.256" invalid

이 문제를 해결하려면 오류에서 ConfigMap의 잘못된 부분에 대한 세부정보를 검토합니다. 앞의 예시에서 8.8.8.256은 유효한 IP 주소가 아닙니다.

다음 단계