아래에 나올 내용은 미니쿠버를 이용하는 환경을 생성하는 과정에서 custom docker image 를 쓰기위해서 알아보는 과정에서 시작된다.
이 내용을 해결하기 위해 헤맨것만 5시간쯤. ㅠㅠ 해결되서 기쁘다.
하지만 본격적인 서비스 운영에서 겪을 수 있는 일일까?! 싶은데.. (minikube 안쓸거니까...)
docker desktop의 config.json을 찾아서 insecure-registry 를 적용하라는 내용이 검색결과의 대부분이지만 해결되지 않는다.
아무리 registry가 돌아가는 docker에 insecure-registry 설정을 해도 미니쿠버 내에서는 pod 생성시 errImagePull 에러가 나오게 된다. 그 에러는 아래.
get server gave http response to https client
좀 처럼 해결 하기 쉽지 않으나. 아래 과정을 통해 해결했다.
참고했던 링크는 글 맨 아래에 남겨놓는다.
첫째, 미니쿠버 시작할 때, insecure-registry 인자 넣어 실행하기!
minikube start --insecure-registry="your.private.repo:PORT"
둘째, 미니쿠버 registry-creds 설정하고, 허용하기
minikube addons configure registry-creds
minikube addons enable registry-creds
셋째, 미니쿠버 ssh 접속하여, private registry 로그인하고 사용할 이미지 pull 받기.
minikube ssh
docker login your.private.repo
docker pull your.private.repo/whatever-image
넷째, 쿠버네티스에서 사용할 secret 등록해주기
이 시크릿을 나중에 pod 생성할 때 imagePullSecrets에 사용한다.
kubectl create secret docker-registry my-secret --docker-server="https://your.private.repo" --docker-username=”USER” --docker-password=”PASS” --docker-email=”YOU@COMPANY”
참고로 여기에 넣는 "USER"와 "PASS"는 base64 암호화 하지 않고, 사용하고자 하는 값을 쓰면 됨. 이메일 생략가능.
이러면 안되던게 되는게 더 신기함.
다른거 생략하고, deployment 생성 yaml 공유. 이거 보면 바로 이해할 거라 믿음.
apiVersion: apps/v1
kind: Deployment
metadata:
name: node-simple-deployment
labels:
app: node-simple
spec:
replicas: 1
selector:
matchLabels:
app: node-simple
template:
metadata:
labels:
app: node-simple
spec:
containers:
- name: node-simple
image: {private registry address:port}/{imageName}:{version} // 예. indyspot.io:5050/node_sample:latest
ports:
- containerPort: 80
imagePullSecrets:
- name: {secretName} // my-secret (위에서 등록한 secret 이름)
참조
Setting up a local Kubernetes cluster with insecure registries by Albert Lombarte
너무 고마운 알버트.
이글 보고 정말 누군가는 시간 아꼈으면 좋겠다.!!!!!