Pull image จาก Private registry ใน k8s

0
pull-image-private-registry-k8s

ในการ deploy application บน k8s นั้น บางครั้งเราจำเป็นต้องมีการ pull docker image มาจาก private docker registry ของเราเอง ซึ่งหากเราใส่ private  docker image ไปตรงๆ เลยเวลาสร้าง deployment ก็อาจเจอ error ImagePullBackOff ได้ เช่น

$ kubectl get pod
NAME                      READY     STATUS             RESTARTS   AGE 
arix-3-yjq9w              0/1       ImagePullBackOff   0          10m 

วิธีแก้ไขก็คือเราต้องสร้าง secret ก่อนเพื่อกำหนดค่าต่างๆ ของ docker-registry ลงไป แล้วค่อยนำไปเรียกใช้งาน

สมมติว่าผมจะทำการ pull image มาจาก gitlab.com นะ

สร้าง secret สำหรับ private registry ชื่อ gitlab-registry

$ kubectl create secret docker-registry gitlab-registry --docker-server=<your-registry-server> --docker-username=<your-name> --docker-password=<your-pword> --docker-email=<your-email>
  • <your-registry-server> คือ registry url เช่น https://registry.gitlab.com
  • <your-name> คือ ชื่อผู้ใช้งาน
  • <your-pword> คือ รหัสผ่าน
  • <your-email> คือ อีเมล

หลังจากใช้งานคำสั่งด้านบนแล้วก็จะได้ secret ที่ชื่อว่า gitlab-registry

$ kubectl get secret
NAME              TYPE                      DATA      AGE
gitlab-registry   kubernetes.io/dockercfg   1         83d

ลองขอดูรายละเอียดของ gitlab-registry

$ kubectl get secret/gitlab-registry --output yaml

ได้ค่าออกมาแบบนี้

apiVersion: v1
data:
  .dockerconfigjson: eyJodHRwczovL2luZGV4L ... J0QUl6RTIifX0=
kind: Secret
metadata:
  ...
  name: gitlab-registry
  ...
type: kubernetes.io/dockerconfigjson

ค่าของ .dockerconfigjson เป็นข้อมูลของเราทั้งหมด โดยมันจะถูกเข้ารหัสแบบ base64 ไว้ ดังนั้นต้องถอดรหัสค่านี้ออกมาก่อน โดยการ

$ echo "c3R...zE2" | base64 --decode

{"https://registry.gitlab.com":{"username":"foo","password":"bar","email":"pikanoxup@autowb.com","auth":"yJodHRwczovL2luZGV4A=="}}

วิธีการสร้าง deployment เพื่อให้เรียกใช้ secret นี้

ในการสร้าง deployment ที่จะต้อง pull image มาจาก private-registry เราสามารถกำหนดในไฟล์ได้ดังนี้

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: private-reg
spec:
  containers:
  - name: private-reg-container
    image: registry.gitlab.com/twinsyn/laravel:dev
  imagePullSecrets:
  - name: gitlab-registry

สังเกตุจาก imagePullSecrets: จะเป็นการเรียกใช้งาน secret ชื่อ gitlab-registry

Thanks: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/

LEAVE A REPLY

Please enter your comment!
Please enter your name here

thirteen + 19 =