2024년 11월 초부터 ubuntu에 kubernetes 클러스터를 구성하기 위해 kubeadm, kubelet, kubectl 설치하려는데 GPG error가 발생하고 있다. Kubernetes의 package repository에서 이전 버전들을 더 이상 제공하지 않는 것일까? 어떤 문제인지 살펴보자.
Kubernetes legacy version들의 최후 - Kubernetes apt install GPG error
GPG error로 kubernetes apt install 실패
이전 글에서 올해 초부터 kubernetes package repository의 변화로 인해 v1.24 이전 버전을 apt로 설치하지 못하게 되었다는 내용을 다루었다. 그런데, 2024년 11월 초부터 v1.24 ~ v1.27 버전들도 설치할 때 문제가 발생하고 있다.
현재 arm64 아키텍처 기반 ubuntu 22.04 운영체제 jharoian3/ubuntu-22.04-arm64
에서 테스트한 결과, apt install
명령어를 통해 v1.27 버전의 kubeadm, kubelet, kubectl 등을 설치하면 다음과 같이 오류가 발생한다.
$ curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.27/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
File '/etc/apt/keyrings/kubernetes-apt-keyring.gpg' exists. Overwrite? (y/N) y
$ echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.27/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.27/deb/ /
$ sudo apt-get update
Hit:1 https://download.docker.com/linux/ubuntu jammy InRelease
Get:2 https://prod-cdn.packages.k8s.io/repositories/isv:/kubernetes:/core:/stable:/v1.27/deb InRelease [1,192 B]
Hit:3 http://ports.ubuntu.com/ubuntu-ports jammy InRelease
Err:2 https://prod-cdn.packages.k8s.io/repositories/isv:/kubernetes:/core:/stable:/v1.27/deb InRelease
The following signatures were invalid: EXPKEYSIG 234654DA9A296436 isv:kubernetes OBS Project <isv:kubernetes@build.opensuse.org>
Get:4 http://ports.ubuntu.com/ubuntu-ports jammy-updates InRelease [128 kB]
Hit:5 http://ports.ubuntu.com/ubuntu-ports jammy-backports InRelease
Get:6 http://ports.ubuntu.com/ubuntu-ports jammy-security InRelease [129 kB]
Get:7 http://ports.ubuntu.com/ubuntu-ports jammy-updates/main arm64 Packages [1,892 kB]
Get:8 http://ports.ubuntu.com/ubuntu-ports jammy-updates/universe arm64 Packages [1,095 kB]
Reading package lists... Done
W: GPG error: https://prod-cdn.packages.k8s.io/repositories/isv:/kubernetes:/core:/stable:/v1.27/deb InRelease: The following signatures were invalid: EXPKEYSIG 234654DA9A296436 isv:kubernetes OBS Project <isv:kubernetes@build.opensuse.org>
E: The repository 'https://pkgs.k8s.io/core:/stable:/v1.27/deb InRelease' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.
$ apt-cache policy kubeadm
N: Unable to locate package kubeadm
GPG error
부분부터 대략 살펴보면 kubernetes package repository에서 조회한 v1.27 버전이 올바르게 sign되어있지 않다는 내용이다. 보안 관련 문제로 sudo apt-get update
에 실패해서 apt 패키지 목록에 kubeadm, kubelet, kubectl이 추가되지 않는 것이다.
GPG error 해결 방법
Kubernetes 버전 올리기
내가 참여하던 프로젝트에서는 on-premise 환경에 kubernetes 클러스터를 구성하는지라 상대적으로 옛날 버전(v1.24)을 사용하고 있었다. 운영 환경과 동일한 개발 환경을 구성하려는데 계속 실패해서 당황스러웠다. 확인 결과, v1.28 버전부터는 GPG error가 발생하지 않는다.
$ curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
File '/etc/apt/keyrings/kubernetes-apt-keyring.gpg' exists. Overwrite? (y/N) y
$ echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /
$ sudo apt-get update
Hit:1 https://download.docker.com/linux/ubuntu jammy InRelease
Get:2 https://prod-cdn.packages.k8s.io/repositories/isv:/kubernetes:/core:/stable:/v1.28/deb InRelease [1,192 B]
Get:3 https://prod-cdn.packages.k8s.io/repositories/isv:/kubernetes:/core:/stable:/v1.28/deb Packages [21.3 kB]
Hit:4 http://ports.ubuntu.com/ubuntu-ports jammy InRelease
Hit:5 http://ports.ubuntu.com/ubuntu-ports jammy-updates InRelease
Hit:6 http://ports.ubuntu.com/ubuntu-ports jammy-backports InRelease
Hit:7 http://ports.ubuntu.com/ubuntu-ports jammy-security InRelease
Fetched 22.5 kB in 2s (12.6 kB/s)
Reading package lists... Done
$ apt-cache policy kubeadm
kubeadm:
Installed: (none)
Candidate: 1.28.15-1.1
Version table:
1.28.15-1.1 500
500 https://pkgs.k8s.io/core:/stable:/v1.28/deb Packages
1.28.14-2.1 500
500 https://pkgs.k8s.io/core:/stable:/v1.28/deb Packages
1.28.13-1.1 500
500 https://pkgs.k8s.io/core:/stable:/v1.28/deb Packages
1.28.12-1.1 500
500 https://pkgs.k8s.io/core:/stable:/v1.28/deb Packages
1.28.11-1.1 500
500 https://pkgs.k8s.io/core:/stable:/v1.28/deb Packages
1.28.10-1.1 500
500 https://pkgs.k8s.io/core:/stable:/v1.28/deb Packages
1.28.9-2.1 500
500 https://pkgs.k8s.io/core:/stable:/v1.28/deb Packages
1.28.8-1.1 500
500 https://pkgs.k8s.io/core:/stable:/v1.28/deb Packages
1.28.7-1.1 500
500 https://pkgs.k8s.io/core:/stable:/v1.28/deb Packages
1.28.6-1.1 500
500 https://pkgs.k8s.io/core:/stable:/v1.28/deb Packages
1.28.5-1.1 500
500 https://pkgs.k8s.io/core:/stable:/v1.28/deb Packages
1.28.4-1.1 500
500 https://pkgs.k8s.io/core:/stable:/v1.28/deb Packages
1.28.3-1.1 500
500 https://pkgs.k8s.io/core:/stable:/v1.28/deb Packages
1.28.2-1.1 500
500 https://pkgs.k8s.io/core:/stable:/v1.28/deb Packages
1.28.1-1.1 500
500 https://pkgs.k8s.io/core:/stable:/v1.28/deb Packages
1.28.0-1.1 500
500 https://pkgs.k8s.io/core:/stable:/v1.28/deb Package
예상하기로는 kubernetes package repository에서 v1.28 이전의 옛날 버전들을 더 이상 지원하지 않기로 한 것 같다. Kubernetes의 버전은 2024년 11월 기준 v1.31까지 나와있으므로 이 기세라면 v1.28도 조만간 위험하지 않을까 싶다.
보안 경고 무시하기
Kubernetes의 강력한 최신 feature들을 활용하기 위해 kubernetes의 release 일정에 맞춰서 버전을 자주 올려주면 좋겠지만, 고객사의 kubernetes 클러스터 버전을 자주 건드리기에는 부담스럽다. 인프라팀과의 충돌이 불 보듯 뻔하다. Kubernetes 버전 변경에 따른 migration test를 위해 추가 작업들이 생기는 것은 덤이다.
보안팀과 잘 합의할 수 있는 여력이 있다면 GPG error에서 경고하는 보안 이슈를 무시하고 설치하는 방법이 있다. 다음과 같이 설치 명령어 중 signature 관련 설정 부분을 [trusted=yes]
로 바꾸면 된다.
echo "deb [trusted=yes] https://pkgs.k8s.io/core:/stable:/v1.27/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list
위 명령어를 실행한 뒤 apt 패키지 목록을 업데이트해보면 여전히 GPG error가 발생하긴 하지만, 정상적으로 kubeadm, kubelet, kubectl 등의 패키지가 추가된 것을 확인할 수 있다. GPG error를 해결했다기보다는 보안 리스크를 떠안고 우회하는 것이므로 주의해서 사용하자.
$ echo "deb [trusted=yes] https://pkgs.k8s.io/core:/stable:/v1.27/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb [trusted=yes] https://pkgs.k8s.io/core:/stable:/v1.27/deb/ /
$ sudo apt-get update
Hit:1 https://download.docker.com/linux/ubuntu jammy InRelease
Get:2 https://prod-cdn.packages.k8s.io/repositories/isv:/kubernetes:/core:/stable:/v1.27/deb InRelease [1,192 B]
Ign:2 https://prod-cdn.packages.k8s.io/repositories/isv:/kubernetes:/core:/stable:/v1.27/deb InRelease
Get:3 https://prod-cdn.packages.k8s.io/repositories/isv:/kubernetes:/core:/stable:/v1.27/deb Packages [23.8 kB]
Hit:4 http://ports.ubuntu.com/ubuntu-ports jammy InRelease
Hit:5 http://ports.ubuntu.com/ubuntu-ports jammy-updates InRelease
Hit:6 http://ports.ubuntu.com/ubuntu-ports jammy-backports InRelease
Hit:7 http://ports.ubuntu.com/ubuntu-ports jammy-security InRelease
Fetched 25.0 kB in 2s (13.7 kB/s)
Reading package lists... Done
W: GPG error: https://prod-cdn.packages.k8s.io/repositories/isv:/kubernetes:/core:/stable:/v1.27/deb InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 234654DA9A296436
$ apt-cache policy kubeadm
kubeadm:
Installed: (none)
Candidate: 1.27.16-1.1
Version table:
1.27.16-1.1 500
500 https://pkgs.k8s.io/core:/stable:/v1.27/deb Packages
1.27.15-1.1 500
500 https://pkgs.k8s.io/core:/stable:/v1.27/deb Packages
1.27.14-1.1 500
500 https://pkgs.k8s.io/core:/stable:/v1.27/deb Packages
1.27.13-2.1 500
500 https://pkgs.k8s.io/core:/stable:/v1.27/deb Packages
1.27.12-1.1 500
500 https://pkgs.k8s.io/core:/stable:/v1.27/deb Packages
1.27.11-1.1 500
500 https://pkgs.k8s.io/core:/stable:/v1.27/deb Packages
1.27.10-1.1 500
500 https://pkgs.k8s.io/core:/stable:/v1.27/deb Packages
1.27.9-1.1 500
500 https://pkgs.k8s.io/core:/stable:/v1.27/deb Packages
1.27.8-1.1 500
500 https://pkgs.k8s.io/core:/stable:/v1.27/deb Packages
1.27.7-1.1 500
500 https://pkgs.k8s.io/core:/stable:/v1.27/deb Packages
1.27.6-1.1 500
500 https://pkgs.k8s.io/core:/stable:/v1.27/deb Packages
1.27.5-1.1 500
500 https://pkgs.k8s.io/core:/stable:/v1.27/deb Packages
1.27.4-1.1 500
500 https://pkgs.k8s.io/core:/stable:/v1.27/deb Packages
1.27.3-1.1 500
500 https://pkgs.k8s.io/core:/stable:/v1.27/deb Packages
1.27.2-1.1 500
500 https://pkgs.k8s.io/core:/stable:/v1.27/deb Packages
1.27.1-1.1 500
500 https://pkgs.k8s.io/core:/stable:/v1.27/deb Packages
1.27.0-2.1 500
500 https://pkgs.k8s.io/core:/stable:/v1.27/deb Packages
More Posts
Certbot과 docker로 카페24 사이트에 무료 HTTPS 적용하기 - 무료 SSL 인증서 설치 방법
Let's Encrypt를 사용하면 명령어 몇 줄로 무료 SSL 인증서를 쉽게 받을 수 있다. 게다가 ZeroSSL과 달리 무료 인증서 최대 개수 제한도 없다. ZeroSSL 대신 사용할 수 있는 초간단 카페24 무료 SSL 인증서 설치 방법에 대해 알아보자.
ZeroSSL로 카페24 사이트에 무료 HTTPS 적용하기 - 무료 SSL 인증서 설치 방법
웹 사이트에 HTTPS를 적용하려면 SSL 인증서를 설정해주어야 한다. 카페24는 UI를 통해 외부 인증서를 FTP, SSH 등의 복잡한 과정 없이 설정할 수 있는 기능을 제공한다. ZeroSSL 이메일 인증을 통해 카페24에서 호스팅하는 사이트에 무료 인증서를 쉽게 적용하는 방법을 알아보자.
Python으로 kubernetes 환경에 app 배포하기 - Kubernetes deployment with python
Kubectl 명령어를 통해 kubernetes 환경에 다양한 구성요소들을 배포할 수 있지만, python으로 템플릿 코드를 짜두면 개발자들도 편리하게 배포를 자동화할 수 있다. Jinja2와 kubernetes 패키지를 통해 사용자 요청에 따라 kubernetes 환경에 pod들을 띄우는 기능을 만들어보자.
Comments