kubectl get node 오류: 서버에 로그인해야 합니다(권한 없음) - 해결 방법

kubectl get node 오류: 서버에 로그인해야 합니다(권한 없음) - 해결 방법

인프라를 변경하지 않고 kubectl 명령을 실행하면 다음과 같습니다.

kubectl get nodes

오류가 발생했습니다.

You must be logged in to the server (Unauthorized) 

kubernetes 클러스터는 정상적으로 작동하고 있었고 아무런 변경도 하지 않았습니다... 이것을 디버깅하는 방법에 대한 아이디어가 있습니까? kubectl에는 추가 정보를 제공하는 -vv od 디버그 플래그가 없습니다.

내가 시도하면

kubectl version

Client Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.0",
(...) 
error: You must be logged in to the server (the server has asked for the client to provide credentials)

답변1

제 경우에는 kubernates 인증서를 갱신한 후 문제가 시작되어 기존 인증서 ~/.kube/config에 오래된 키와 인증서 값이 포함되었습니다.

해결책은 교체하는 것이었습니다.가치 client-certificate-data그리고 같은 이름의 업데이트된 파일의 값이 있는 client-key-data파일에 저장됩니다 .~/.kube/config/etc/kubernetes/kubelet.conf

답변2

최신 버전의 Kubernetes부터 파일로 및 client-certificate-data에서 client-key-data파일 을 복사할 수 있습니다 . 보다/etc/kubernetes/admin.conf~/.kube/config이 답변인증서 만료 시기를 결정하는 데 사용됩니다.

답변3

오늘 비슷한 문제에 직면했는데 위의 의견이 문제를 해결하는 데 도움이 되었습니다. 비슷한 설정을 가진 사람들에게 도움이 될 수 있기 때문에 내 시나리오에 더 자세한 내용을 추가하고 있습니다.

k8s 클러스터에 연결하기 위한 별도의 사용자가 있습니다(EC2 인스턴스의 일반 클러스터입니다). ClusterRoleBindings를 추가하여 제한된 액세스 권한을 가진 사용자 arunlal을 만들었습니다.

클러스터에 대한 API를 실행하는 동안 다음 오류가 발생하는 경우(제 경우에는 Kubectl):

error: You must be logged in to the server (Unauthorized)

다음 순서로 진행하세요.

- 먼저 구성 파일(로컬 클라이언트)에 사용된 인증서를 확인하세요.

기본 구성에 다른 k8s 및 okd 클러스터 자격 증명에 대한 세부 정보가 있었기 때문에 로컬 시스템에 별도의 구성이 있었습니다. 그래서 내 노트북(/Users/arunlal/.kube/config_two)에 두 번째 구성을 만들었습니다. 이 경우 다음과 같은 별칭이 있습니다.

alias kctl="kubectl --kubeconfig=/Users/arunlal/.kube/config_two"

- 이 파일에서 우리가 사용하는 인증서를 얻을 수 있습니다.

[[이메일 보호됨]~] 고양이 /Users/arunlal/.kube/config_two| grep -A 사용자 5명
사용자:
- 이름 : 아룬랄
  사용자:
    클라이언트 인증서: /Users/arunlal/.arunlal-keys/arunlal.crt
    클라이언트 키: /Users/arunlal/.arunlal-keys/arunlal.key

- 클라이언트 구성에서 인증서를 받으면 openssl 명령을 사용하여 유효성을 확인할 수 있습니다.

    [[이메일 보호됨]~] openssl x509 -noout -dates -in /Users/arunlal/.arunlal-keys/arunlal.crt
    notBefore=6월 22일 23:43:22 2021 GMT
    notAfter=2021년 9월 30일 23:43:22 GMT

- 만료 확인

사용자를 생성하는 동안 일수가 5일로 지났는데 그게 문제였습니다. 사용자를 어떻게 생성했나요?

openssl genrsa -out arunlal.key 2048
openssl req -new -key arunlal.key -out arunlal.csr -subj "/CN=arunlal/O=crybit"
openssl x509 -req -in arunlal.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out arunlal.crt -days 5
kubectl config set-credentials arunlal --client-certificate=/root/arunlal-keys/arunlal.crt  --client-key=/root/arunlal-keys/arunlal.key

- 수정하기 위해 더 많은 일수로 인증서를 다시 만들었습니다.

openssl x509 -req -in arunlal.csr -CA /etc/kubernetes/pki/ca.crt
-CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out arunlal.crt -days 100

- k8s 클러스터에서 실행해야 합니다.

- 인증서를 로컬로 교체했습니다.

/Users/arunlal/.arunlal-keys/arunlal.crt를 새 인증서로 수정했습니다.

이것이 누군가에게 도움이 되기를 바랍니다. 감사해요!

~ 아룬

답변4

kubeconfig 인증서가 변경되었을 수 있습니다. Terraform을 사용하여 클러스터를 배포한 경우 새로운 kubeconfig 파일을 생성하려면 Terraform을 적용하세요.

관련 정보