Anthos 비공개 모드의 알려진 문제

이 페이지에는 Anthos 비공개 모드와 관련된 알려진 문제와 함께 이러한 문제를 방지하거나 복구하는 방법이 나와 있습니다.

관리자 클러스터를 만드는 도중 waiting for node update jobs 상태에서 멈춤

관리자 클러스터를 만드는 데 일반적으로 30분 정도 걸립니다. 클러스터가 오랜 시간 '노드 업데이트 작업 대기 중' 단계에서 중단되면 Ctrl + C를 사용하여 프로세스를 종료할 수 있습니다. 설치의 마지막 단계입니다. 이 프로세스를 종료해도 설치에는 영향을 미치지 않습니다.

사용자 클러스터 만들기가 중단됨

사용자 클러스터를 만들려면 일반적으로 10~30분 정도 걸립니다. 클러스터 진행 중 중단된 것으로 보이면 아래 명령어를 사용하여 클러스터 만들기 진행 상태를 확인할 수 있습니다.

kubectl get pods -n cluster-USER_CLUSTER --kubeconfig=ADMIN_KUBECONFIG
kubectl get Cluster -n cluster-USER_CLUSTER -o yaml --kubeconfig=ADMIN_KUBECONFIG

여러 제어 영역 노드로 관리자 클러스터 업그레이드 시 중단됨

관리자 클러스터 업그레이드가 제어 영역 노드 업그레이드에서 중단될 수 있습니다. 업그레이드 명령어는 Waiting for upgrade to complete... Upgrading <control plane node IP>에 유지됩니다.

다음 조건이 모두 구성된 경우라면 이 문제는 관리자 클러스터에만 영향을 미칩니다.

  • 구성된 비공개 레지스트리는 비공개 인증 기관에서 서명한 인증서를 사용합니다.

  • 관리자 클러스터는 여러 제어 영역 노드로 구성됩니다. 예를 들어 고가용성으로 구성된 경우입니다.

  • 제어 영역 노드에 docker가 설치되어 있습니다.

이 문제는 잘못된 위치에서 레지스트리 인증 기관 파일을 가져오려고 시도하는 잘못된 구성으로 인해 발생합니다. 이 문제를 해결하려면 각 노드에 인증 기관 파일을 수동으로 배포해야 합니다. 예를 들어 관리 워크스테이션에서 다음 스크립트를 실행합니다.

#!/bin/bash

# Docker login to generate the $HOME/.docker/config.json file
docker login REGISTRY_HOST

# List the IP addresses for all the control plane nodes, separated by whitespace.
IPs=( NODE_IPS_SEPARATED_BY_SPACE )

for ip in "${IPs[@]}"; do
  # Copy the docker config over to the nodes.
  scp $HOME/.docker/config.json USER_NAME@${ip}:docker-config.json

  # Fix the image pull credentials issue
  ssh USER_NAME@${ip} "sudo mkdir -p /root/.docker && sudo cp docker-config.json /root/.docker/config.json"

  # Fix the cert issue, only needed for private registry with self-signed certs.
  ssh USER_NAME@${ip} "sudo mkdir -p /etc/docker/certs.d && sudo cp -r /etc/containerd/certs.d/REGISTRY_HOST /etc/docker/certs.d/"
done

USER_NAMEREGISTRY_HOST관리자 클러스터 구성에 구성된 값으로 바꿉니다.

400 비공개 IP 액세스 승인 오류

Open ID Connect(OIDC) 인증을 설정한 후에도 IP 주소를 사용하여 관리 센터에 액세스하는 경우 승인 페이지로 리디렉션되고 비공개 IP 액세스 승인 관련 오류가 발생합니다. 예를 들면 다음과 같습니다.

오류 메시지: 자세한 내용은 관리자에게 문의하세요.

플랫폼에 액세스하기 위해 IP 대신 구성된 도메인 이름을 사용하여 actl platform management-center describe를 실행하여 전체 주소를 검색합니다. 리디렉션 콜백의 경우 도메인이 필요합니다. 도메인은 비공개 주소를 가리킬 수 있습니다.

초기 플랫폼 관리자 생성 시 500 Http 실패 응답

클러스터에 OIDC 프로필을 적용할 때 프로필의 사용자 이름 또는 그룹 프리픽스에 '/' 문자가 있으면 제출을 클릭한 후 500 Http 실패 응답을 받을 수 있습니다.

이 문제를 해결하려면 프로필을 삭제하고 사용자 이름과 그룹 프리픽스에 '/' 문자가 없는 새 프로필을 만든 후 새 프로필을 클러스터에 적용해 보세요.

RBAC: 액세스 거부됨

플랫폼 관리자 계정으로 로그인한 RBAC: access denied 메시지가 표시되는 경우 OIDC 설정에서 오류가 발생한 것일 수 있습니다. 인증 구성 재설정을 참조하세요.

레지스트리 미러 구성을 사용할 때 비공개 레지스트리에서 이미지 사용

클러스터가 레지스트리 미러 구성을 사용하여 설정된 경우 비공개 레지스트리에서 직접 이미지를 사용할 때 이미지 경로를 기록합니다.

예를 들어 미러 구성을 사용하여 관리자 클러스터를 만든 경우는 다음과 같습니다.

registryMirrors:
- endpoint: https://10.200.0.2/v2/library

docker push 10.200.0.2/library/test-image:test-tag가 이미지를 비공개 레지스트리에 업로드합니다. 배포 또는 Pod를 만들 때 이미지 10.200.0.2/library/test-image:test-tag를 있는 그대로 사용할 수 없습니다. 이는 노드의 containerd 구성(/etc/containerd/config.toml)이 10.200.0.2/library에서 가져온 모든 이미지를 미러링하도록 구성되어 있기 때문입니다. 그러면 containerd는 10.200.0.2/library/library/test-image:test-tag에서 이미지를 가져오려고 시도합니다. 이 문제를 해결하려면 다음 단계 중 하나를 시도하세요.

  • docker push 10.200.0.2/library/library/test-image:test-tag 엔드포인트 아래의 이미지 푸시
  • 이미지 경로 10.200.0.2/test-image:test-tag 사용

OIDC가 설정되어 있으면 관리 센터를 0.8에서 0.9로 업그레이드할 수 없음

OIDC가 설정된 경우 관리 센터를 0.8에서 0.9로 업그레이드하면 다음 오류 메시지와 함께 실패합니다.

level=fatal msg="Unable to initialize options: unable to resolve management center cluster: The given \"management center\" cluster \"admin-admin@admin\" does not appear to be a valid management center cluster.  Did you choose the right cluster?\nunable to list DomainIDPMapping objects: the server could not find the requested resource"

이 문제를 해결하려면 DomainIDPMapping CRD를 사용하여 파일을 만듭니다.

apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.4.0
  creationTimestamp: null
  name: domainidpmappings.managementcenter.anthos.cloud.google.com
spec:
  group: managementcenter.anthos.cloud.google.com
  names:
    kind: DomainIDPMapping
    listKind: DomainIDPMappingList
    plural: domainidpmappings
    singular: domainidpmapping
  scope: Cluster
  versions:
  - name: v1alpha1
    schema:
      openAPIV3Schema:
        description: DomainIDPMapping is the Schema for the domainidpmappings API
        properties:
          apiVersion:
            description: 'APIVersion defines the versioned schema of this representation
              of an object. Servers should convert recognized schemas to the latest
              internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
            type: string
          kind:
            description: 'Kind is a string value representing the REST resource this
              object represents. Servers may infer this from the endpoint the client
              submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
            type: string
          metadata:
            type: object
          spec:
            description: DomainIDPMappingSpec is the struct that contains the mapping
              from the domain to the authentication method name specified in the AIS
              ClientConfig.
            properties:
              authMethodName:
                description: AuthMethodName is the name of the authentication method
                  configured in the AIS ClientConfig.
                type: string
              domainName:
                description: DomainName is the domain used to serve the Anthos web
                  endpoints. The domain should not include the protocol such as http
                  or https. Wild cards are not supported in the domain name.
                type: string
            required:
            - authMethodName
            - domainName
            type: object
        type: object
    served: true
    storage: true
status:
  acceptedNames:
    kind: ""
    plural: ""
  conditions: []
  storedVersions: []

CRD를 적용합니다.

kubectl --kubeconfig=ADMIN_KUBECONFIG apply -f domainIDPMappingCRD.yaml

EnvoyFilter 및 oauth2-proxy 네임스페이스를 삭제합니다.

kubectl --kubeconfig=ADMIN_KUBECONFIG delete envoyfilter istio-ingressgateway -n istio-system
kubectl --kubeconfig=ADMIN_KUBECONFIG delete namespace oauth2-proxy

프리픽스 anthos-log-forwarder가 있는 pod의 이미지를 가져오는 중에 오류 발생

클러스터를 설치할 때 --private-registry가 사용 설정된 경우 anthos-log-forwarder 경로에서 initContainer가 사용하는 이미지 경로를 --private-registry에 지정된 경로로 덮어쓰지 않습니다. 이 작업은 관리자 클러스터에서만 수행됩니다.

예를 들어 관리자 클러스터에서 다음 오류가 관찰되는 경우가 있습니다.

kubectl -n kube-system get pods --selector=app=anthos-log-forwarder
anthos-log-forwarder-2n96b                           0/1     Init:ErrImagePull       0          16s
anthos-log-forwarder-8fxm8                           0/1     Init:ErrImagePull       0          16s
anthos-log-forwarder-bh7rb                           0/1     Init:ImagePullBackOff   0          16s

이 문제는 --private-registry가 설정된 관리자 클러스터만 영향을 받으며 다음 출시 버전에서는 해결될 예정입니다.

Pod 연결 실패 및 역방향 경로 필터링

Anthos 비공개 모드는 노드 역방향 경로 필터링을 구성하여 소스 유효성 검사(net.ipv4.conf.all.rp_filter=0)를 사용 중지합니다. rp_filter 설정이 1 또는 2로 변경되면 노드 외부 통신 제한 시간으로 인해 포드가 실패합니다.

역방향 경로 필터링은 IPv4 구성 폴더(net/ipv4/conf/all)의 rp_filter 파일로 설정됩니다. 이 값은 /etc/sysctl.d/60-gce-network-security.conf와 같은 네트워크 보안 구성 파일에 역방향 경로 필터링 설정을 저장하는 sysctl로 재정의될 수도 있습니다.

포드 연결을 복원하려면 net.ipv4.conf.all.rp_filter를 다시 0으로 수동 설정하거나 anetd 포드를 다시 시작하여 net.ipv4.conf.all.rp_filter0으로 다시 설정합니다. anetd 포드를 다시 시작하려면 다음 명령어를 사용하여 anetd 포드를 찾아 삭제하면 새 anetd 포드가 그 위치에서 시작됩니다.

kubectl get pods -n kube-system
kubectl delete pods -n kube-system ANETD_XYZ

ANETD_XYZanetd Pod의 이름으로 바꿉니다.

업그레이드 후 머신 페이지에 머신이 나열되지 않음

anthos-cluster-operator pod를 다시 시작합니다.

kubectl --kubeconfig ADMIN_KUBECONFIG delete pods -l control-plane=anthos-cluster-operator -n kube-system

업그레이드 후 사용자 클러스터를 수정할 수 없음

anthos-cluster-operator pod를 다시 시작합니다.

kubectl --kubeconfig ADMIN_KUBECONFIG delete pods -l control-plane=anthos-cluster-operator -n kube-system

다음 단계