도메인 "makdom.ddns.net"을 통해 액세스할 수 있는 docker에 개인 레지스트리를 설정했으며 로컬 로그인에서 이미지를 푸시하고 가져올 수 있으며 슬레이브 kubes 노드에서도 문제가 없습니다. 이 작업을 수행할 수 있습니다.
하지만 kubes 배포 파일을 작성할 때 프라이빗 레지스트리에서 이미지를 가져올 수 없어 실패합니다.
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: ssh-deployment
spec:
template:
metadata:
labels:
app: helloworld
spec:
containers:
- name: ssh-demo
image: makdom.ddns.net/my-ubuntu
imagePullPolicy: IfNotPresent
ports:
- name: nodejs-port
containerPort: 22
imagePullSecrets:
- name: myregistrykey
비밀:
DOCKER_REGISTRY_SERVER="https://makdom.ddns.net/v1/"
DOCKER_USER="user"
DOCKER_PASSWORD="password"
DOCKER_EMAIL="[email protected]"
kubectl create secret docker-registry myregistrykey \
--docker-server=$DOCKER_REGISTRY_SERVER \
--docker-username=$DOCKER_USER \
--docker-password=$DOCKER_PASSWORD \
--docker-email=$DOCKER_EMAIL
실수:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 1m default-scheduler Successfully assigned ssh-deployment-7b7c7bf977-m6stk to kubes-slave
Normal SuccessfulMountVolume 1m kubelet, kubes-slave MountVolume.SetUp succeeded for volume "default-token-mx7qq"
Normal Pulled 1m (x3 over 1m) kubelet, kubes-slave Container image "makdom.ddns.net/my-ubuntu" already present on machine
Normal Created 1m (x3 over 1m) kubelet, kubes-slave Created container
Normal Started 1m (x3 over 1m) kubelet, kubes-slave Started container
Normal Pulling 34s (x2 over 1m) kubelet, kubes-slave pulling image "makdom.ddns.net/my-ubuntu"
Warning Failed 34s (x2 over 1m) kubelet, kubes-slave Failed to pull image "makdom.ddns.net/my-ubuntu": rpc error: code = Unknown desc = Error: image my-ubuntu:latest not found
Warning Failed 34s (x2 over 1m) kubelet, kubes-slave Error: ErrImagePull
Warning BackOff 19s (x6 over 1m) kubelet, kubes-slave Back-off restarting failed container
답변1
알려진 문제https://github.com/kubernetes/kubernetes/issues/57427, 마스터에서 해결됨https://github.com/kubernetes/kubernetes/pull/57463
1.9.1에 대한 수정 사항https://github.com/kubernetes/kubernetes/pull/57472
이전 해결 방법:
프라이빗 레지스트리에 대한 .dockerconfigjson이 이미 있는 경우 유형과 데이터 키를 수동으로 지정할 수 있습니다.
kubectl create secret generic my-secret-name \
--type=kubernetes.io/dockerconfigjson \
--from-file .dockerconfigjson=/path/to/.dockerconfigjson
.dockerconfigjson 파일이 아직 없으면 kubectl create secret docker-registry
생성된 키를 수동으로 수정할 수 있습니다.
- 다음에 추가
--dry-run -o yaml > secret.yaml
- 유형을
kubernetes.io/dockercfg
다음에서 변경하세요.kubernetes.io/dockercfgjson
- 데이터 키를
.dockercfg
다음에서 변경하세요..dockercfgjson
- 수정된 비밀 만들기
kubectl create -f secret.yaml