공식문서가 틀린걸까…
https://kubernetes.io/ko/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
위 공식문서에서 kubeadm, kubelet 및 kubectl 설치 섹션에서 따라서 설치하다가
아래의 4번 과정에서 오류가 발생했다.
1.apt 패키지 색인을 업데이트하고, 쿠버네티스 apt 리포지터리를 사용하는 데 필요한 패키지를 설치한다.
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
2. 구글 클라우드의 공개 사이닝 키를 다운로드 한다.
sudo curl -fsSLo /etc/apt/keyrings/kubernetes-archive-keyring.gpg <https://packages.cloud.google.com/apt/doc/apt-key.gp>
3. 쿠버네티스 apt 리포지터리를 추가한다.
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] <https://apt.kubernetes.io/> kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
4. apt 패키지 색인을 업데이트하고, kubelet, kubeadm, kubectl을 설치하고 해당 버전을 고정한다.
sudo get-apt update
바로 여기서 오류 발생!
어떤 오류가 발생하냐면
Err:8 <https://packages.cloud.google.com/apt> kubernetes-xenial InRelease
The following signatures couldn't be verified because the public key is not available: NO_PUBKEY B53DC80D13EDEF05
apt-get update 명령 중 생기는 오류인데, apt의 설치가능한 리소스로 k8s가 정상적으로 추가되지않았다.
public key is not available: NO_PUBKEY B53DC80D13EDEF05
이라는 출력이 나오고, 이후로는 당연히 install 해봤자 안된다.
공식문서를 따라한 것 뿐인데...
해결하고자 한 방법들
1. [해결X] apt-key를 사용하여 수동으로 key 추가하기
deprecated 될 예정인 apt-key를 사용해서 없다고하는 pubkey를 다운받았고, 실제로 다운도 되었고!
그런데 출력을 보니까 중복되는 key가 지워졌다는 걸 보니 key가 이미 있긴 한 것 같다.
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv B53DC80D13EDEF05
위의 명령어를 입력하면, apt-key 를 사용하여 직접 key를 등록해준다.
위 명령어의 출력은 아래와 같을 텐데,
Executing: /tmp/apt-key-gpghome.MRlBtkNXHX/gpg.1.sh --keyserver keyserver.ubuntu.com --recv B53DC80D13EDEF05
gpg: key B53DC80D13EDEF05: 1 duplicate signature removed
gpg: key B53DC80D13EDEF05: "Rapture Automatic Signing Key (~~~~~)" not changed
gpg: Total number processed: 1
gpg: unchanged: 1
이 방법으로는 역시나 똑같은 에러가 발생했다.
이미 중복되는 key가 있다고하니 단순히 key를 다운받지 못한 오류는 아닌 것 같다.
2. [해결X] gpg —dearmor 옵션 주기
—dearmor 옵션을 주면 ASCII 형식의 GPG 키 블록을 바이너리 형식으로 디코딩하여 원래의 이진 형식으로 다운받을 수 있게 하는데, 이것도 여기저기 사이트에서 해결책으로 내놓은 것이다.
curl -fsSL <https://packages.cloud.google.com/apt/doc/apt-key.gpg> | \\
sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-archive-keyring.gpg
이것도 안된다.
3. [해결O] kubernetes github 참고
https://github.com/kubernetes/k8s.io/pull/4837#issuecomment-1446426585
위에 깃헙이슈를 보니까 현재 어떤 문제가 있고, 그 문제가 해결되면 이전처럼(공식 문서처럼) 위의 google cloud url로 pubkey를 받을 수 있다고 하는데 당장은 해당 문제가 해결되지 않은 것 같았다.
결국 지금은 https://dl.k8s.io/apt/doc/apt-key.gpg url에서 받아야한다고 설명하고있는데, url은 맞지만 당장 아래처럼 url만 바꾼다고 해결되지는 않는다.
sudo curl -fsSLo /etc/apt/keyrings/kubernetes-archive-keyring.gpg <https://dl.k8s.io/apt/doc/apt-key.gpg>
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] <https://apt.kubernetes.io/> kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
왜냐하면 gpg public key와 apt source list 등에 이미 google cloud url에서 받은 key로 되어있고,
url을 고쳐서 다시 한다고해서 이를 덮어써주진않는다. 그럼 어떡하지? 다 지워야지..
기존 gpg pubkey, sources.list.d 정리
아래의 두 사진의 directory에서 이미 존재하는 apt key 관련 파일들을 삭제하고 나서 다시 변경된 url로 키를 요청해야 가능하다.
사진의 디렉토리 안의 kubernetes 관련된 파일들을 삭제한 후,
아래 명령어로 다시 update하면 문제없이 pubkey를 받아올 수 있다.
sudo curl -fsSLo /etc/apt/keyrings/kubernetes-archive-keyring.gpg <https://dl.k8s.io/apt/doc/apt-key.gpg>
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] <https://apt.kubernetes.io/> kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
이제 install 명령으로 설치하도록 하자
apt-get install -y kubelet kubeadm kubectl