บทช่วยสอนนี้จะแสดงวิธีการปรับใช้รีจิสทรีของคุณเองบน Kubernetes เพื่อจัดเก็บอิมเมจ Docker คุณจะได้เรียนรู้วิธีการตั้งค่าใบรับรอง TLSซึ่งจะออกให้ฟรีจากLetsEncrypt.org.
สถาปัตยกรรมเชิงแนวคิด
คุณจะได้เรียนรู้ว่าแต่ละส่วนในภาพด้านบนทำงานร่วมกันอย่างไรโดยทำตามบทช่วยสอน
ฉันต้องการรีจิสตรีคอนเทนเนอร์ของฉันเองหรือไม่
วัตถุประสงค์หลักของการลงทะเบียนคอนเทนเนอร์คือการจัดเก็บและโฮสต์อาร์ติแฟกต์ที่บรรจุในรูปแบบ Docker หรือ OCI-image.
ในปัจจุบันมีการจัดการการลงทะเบียนสำหรับอิมเมจคอนเทนเนอร์ที่นำเสนอโดยผู้ให้บริการระบบคลาวด์เกือบทุกราย แม้แต่บริษัทที่ไม่ได้ให้บริการทรัพยากรคอมพิวเตอร์ก็เริ่มให้บริการการลงทะเบียน เช่นเจกบ,GitLab.คอม,นักเทียบท่าอิงค์, และGitHub.คอม.
เหตุใดคุณจึงต้องการตั้งค่าของคุณเอง นี่คือเหตุผลบางประการ:
เวลาแฝง:การโฮสต์รีจิสทรีภายในคลัสเตอร์ Kubernetes เป็นวิธีที่เร็วที่สุดในการพุชและดึงอิมเมจ สิ่งนี้สำคัญสำหรับกรณีการใช้งาน เช่น การปรับขนาดอัตโนมัติ และส่งผลต่อความเร็วโดยรวมในการปรับใช้จากไปป์ไลน์ CI/CD
ค่าใช้จ่าย:แบนด์วิธเข้าและออกจากดาต้าเซ็นเตอร์แทบจะไม่ฟรี นับประสาอะไรกับภูมิภาคต่างๆ การโฮสต์อิมเมจ Docker ที่ผลิตและใช้งานทำให้ต้นทุนต่ำที่สุด
ข้อบังคับ:ข้อบังคับและข้อจำกัดทางกฎหมายบางอย่าง เช่น GDPR อาจหมายความว่าการจัดเก็บสิ่งประดิษฐ์กับผู้ให้บริการ SaaS นั้นไม่สามารถทำได้
ความปลอดภัย:แม้ว่าเราจะไม่ได้สำรวจในขอบเขตของบทช่วยสอนนี้ แต่สามารถเพิ่มความปลอดภัยเพิ่มเติมให้กับการลงทะเบียนที่โฮสต์เองโดยใช้ซอฟต์แวร์โอเพ่นซอร์ส เช่นท่าเรือ CNCF. Harbour สแกนอิมเมจ Docker สำหรับCVEและช่องโหว่อื่นๆ
ระบบอัตโนมัติและการพกพา:คุณอาจทำให้รีจิสทรีที่โฮสต์บน AWS เป็นแบบอัตโนมัติได้ แต่ต้องใช้รหัสที่แตกต่างกันโดยสิ้นเชิงเพื่อทำให้รีจิสทรีบน GCP เป็นแบบอัตโนมัติ ด้วยการใช้รีจีสทรีแบบโอเพ่นซอร์สที่เราสามารถโฮสต์ได้เอง ทำให้เราพกพาได้อีกครั้ง ทำให้คุณสามารถโฮสต์โปรเจกต์ของคุณได้ทุกที่ที่คุณต้องการ
สะดวกในการใช้:การรวมหนึ่งรายการขึ้นไปเข้ากับคลัสเตอร์ Kubernetes ที่มีอยู่ในพื้นที่พร้อมใช้งานที่คุณเลือกนั้นค่อนข้างง่าย
ข้อกำหนดเบื้องต้น
-
ชื่อโดเมนหรือโดเมนย่อยที่คุณเป็นเจ้าของ คุณต้องสามารถอัปเดตได้
ระเบียน DNS A
สำหรับโดเมนของคุณ ตัวอย่างเช่น คุณสามารถซื้อได้ที่domains.google. คุณสามารถที่จะจัดการ DNS ผ่าน Civo. -
นักเทียบท่า- เราจะใช้คอนเทนเนอร์ Docker เพื่อสร้างการกำหนดค่าบางอย่างของเรา
-
Kubernetes- บทช่วยสอนนี้เขียนขึ้นโดยคำนึงถึง k3s แต่ยังใช้งานได้กับ Kubernetes เต็มรูปแบบด้วยการปรับแต่งเล็กน้อย
หากคุณเป็นผู้ใช้ Civo เราจะโฮสต์รีจิสทรีของเราบนซีโว คลาวด์. คุณสามารถใช้ได้k3sup (ซอสมะเขือเทศ)เพื่อปรับใช้ Kubernetes บนอินสแตนซ์ของคุณเองภายในไม่กี่นาที
-
หางเสือ- เครื่องมือบรรจุภัณฑ์ที่ใช้ในการติดตั้ง cert-manager และ docker-registry หากคุณไม่ต้องการใช้คอมโพเนนต์ฝั่งเซิร์ฟเวอร์ของหางเสือที่เรียกว่า
ไถนา
มั่นใจได้ว่าคุณสามารถใช้แม่แบบหางเสือ
คำสั่งเพื่อหลีกเลี่ยงการติดตั้งไถนา
. -
ผู้จัดการใบรับรอง- เครื่องมือโดยเจ็ทสแต็คซึ่งจัดหาและต่ออายุใบรับรอง TLS จากมาเข้ารหัสกันเถอะ.
-
รีจิสทรีนักเทียบท่า- นี่คือแผนภูมิหางเสือสำหรับรีจิสทรีโอเพ่นซอร์สของ Docker
-
nginx-เข้า- Nginx IngressController กำหนดค่าอินสแตนซ์ของงินซ์เพื่อจัดการทราฟฟิก HTTP/S ขาเข้า
หมายเหตุ: หากคุณกำลังใช้
k3s
คุณสามารถข้ามการติดตั้ง Nginx IngressController
กวดวิชา
เราจะติดตั้งก่อนหางเสือ
, แล้วไถนา
จากนั้นผู้ใช้ Kubernetes จะสามารถเพิ่มได้งินซ์ในเจ้าภาพผู้ใช้โหมดและ k3s สามารถข้ามขั้นตอนนี้ได้เนื่องจากจะใช้การจราจร. หลังจากนั้น เราจะเพิ่ม cert-manager และ Issuer เพื่อรับใบรับรอง ตามด้วยการลงทะเบียน หลังจากติดตั้งทุกอย่างแล้ว เราสามารถใช้รีจิสทรีของเราได้โดยใช้รหัสผ่านที่สร้างขึ้นระหว่างการสอน คุณจะปิดท้ายด้วยการทดสอบทุกอย่างตั้งแต่ต้นทางจนถึงปลายทาง และหากคุณติดขัด เรามีเคล็ดลับที่เป็นประโยชน์ในการแก้ปัญหา
ส่วนประกอบบางอย่างได้รับการติดตั้งในเนมสเปซของตนเอง เช่น cert-manager ส่วนส่วนประกอบอื่นๆ ทั้งหมดจะถูกติดตั้งลงในค่าเริ่มต้น
เนมสเปซ คุณสามารถควบคุมเนมสเปซด้วยkubectl รับ --namespace/-n NAME
หรือkubectl รับ --all-namespaces/-A
.
นอกจากนี้ยังมีวิธีการบางส่วนในการกวดวิชาเพิ่มเติมในภาคผนวก
ติดตั้งหางเสือ CLI/ไคลเอ็นต์
ในการติดตั้งล่าสุดหางเสือ
,บน MacOS และ Linux::
ขด https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get | ทุบตี
หรือผ่าน Homebrew บน MacOS:
ชงติดตั้ง kubernetes-helm
สำหรับผู้ใช้ Windows ให้ไปที่หางเสือ.
ติดตั้งเครื่องไถพรวน
สร้างสิทธิ์การควบคุมการเข้าถึงตามบทบาท (RBAC) สำหรับผู้ไถพรวนดิน:
kubectl -n kube-system สร้าง sa ไถพรวน \ && kubectl สร้างคลัสเตอร์บทบาทผูกพันไถนา \ --clusterrole คลัสเตอร์ผู้ดูแลระบบ \ --serviceaccount=kube-system:tiller
ติดตั้งคอมโพเนนต์ Tiller ฝั่งเซิร์ฟเวอร์บนคลัสเตอร์ของคุณ:
helm init --skip-refresh --upgrade --service-บัญชีหางเสือ
หมายเหตุ: ขั้นตอนนี้จะติดตั้งคอมโพเนนต์เซิร์ฟเวอร์ในคลัสเตอร์ของคุณ อาจใช้เวลาระหว่างไม่กี่วินาทีถึงสองสามนาทีในการติดตั้งอย่างถูกต้อง คุณควรเห็นหางเสือปรากฏบน:
kubectl รับพ็อด -n ระบบ kube
.
ตอนนี้รอให้ไถพรวนพร้อม:
สถานะการเปิดตัว kubectl -n การปรับใช้ระบบ kube/tiller-deploydeployment "tiller-deploy" เปิดตัวสำเร็จแล้ว
IngressController ในตัวของคุณด้วย k3s
k3s มาพร้อมกับโหลดบาลานเซอร์ที่เรียกว่าการจราจร. หากคุณไม่ได้ใช้บริการ k3s เราจะต้องตั้งค่า IngressController
สำหรับ k3s อย่าติดตั้ง IngressController คุณมีอยู่แล้ว ข้ามไปได้เลย
เพิ่ม IngressController หากไม่ได้ใช้ k3s
หากคุณไม่ได้ใช้ k3sจากนั้นติดตั้ง Nginx Ingress แทน:
หางเสือติดตั้งเสถียร / nginx-ingress --name nginxingress --set rbac.create=true,controller.hostNetwork=true,controller.daemonset.useHostPort=true,dnsPolicy=ClusterFirstWithHostNet,controller.kind=DaemonSet
ติดตั้ง cert-manager
ตอนนี้คุณสามารถติดตั้ง cert-manager เวอร์ชันที่ใช้ในคู่มือนี้คือ v0.9.1 ตรวจสอบได้ที่หน้าผู้จัดการใบรับรองสำหรับหมายเลขเวอร์ชันที่เหมาะสมเพื่อแก้ไขเป็นคำสั่งด้านล่าง
# ติดตั้งทรัพยากร CustomResourceDefinition แยกกันใช้ kubectl --validate=false -f https://raw.githubusercontent.com/jetstack/cert-manager/v0.13.1/deploy/manifests/00-crds.yaml# สร้างเนมสเปซสำหรับ cert- managerkubectl สร้างเนมสเปซ cert-manager# เลเบลเนมสเปซ cert-manager เพื่อปิดใช้งานการตรวจสอบทรัพยากร ฉลากเนมสเปซ kubectl cert-manager certmanager.k8s.io/disable-validation=true# เพิ่มที่เก็บ Jetstack Helmhelm repo เพิ่ม jetstack https://charts.jetstack io# อัปเดตที่เก็บแผนภูมิ Helm ในเครื่องของคุณ cachehelm repo update# ติดตั้ง cert-manager Helm charthelm ติดตั้ง \ --name cert-manager \ --namespace cert-manager \ --version v0.9.1 \ jetstack/cert-manager
ดูสิ่งนี้ด้วย:cert-manager v0.9.0 เอกสาร
สร้าง ClusterIssuer
วิธีที่ cert-manager ออกใบรับรองคือผ่านผู้ออก. เดอะผู้ออก
สามารถออกใบรับรองสำหรับเนมสเปซที่สร้างขึ้นได้ แต่กผู้ออกคลัสเตอร์
สามารถสร้างใบรับรองสำหรับเนมสเปซใดก็ได้ ดังนั้นนั่นคือสิ่งที่เราจะใช้ในวันนี้
บันทึกต่อไปนี้เป็นIssuer.yaml
:
apiVersion: certmanager.k8s.io/v1alpha2kind: ClusterIssuermetadata: ชื่อ: letsencrypt-prod namespace: defaultspec: acme: # เซิร์ฟเวอร์ URL ของเซิร์ฟเวอร์ ACME: https://acme-v02.api.letsencrypt.org/directory # ที่อยู่อีเมลที่ใช้สำหรับ อีเมลลงทะเบียน ACME: user@example.com # ชื่อของความลับที่ใช้ในการจัดเก็บคีย์ส่วนตัวของบัญชี ACME privateKeySecretRef: ชื่อ: letsencrypt-prod # เปิดใช้งานตัวแก้ปัญหาผู้ให้บริการ HTTP-01: - http01: ingress: class: traefik
- แก้ไขไฟล์:
แก้ไขบรรทัด:อีเมล: user@example.com
เพื่อใช้ที่อยู่อีเมลของคุณ
หากใช้ Nginx แทน k3s และ Traefik ให้แก้ไขสิ่งต่อไปนี้:
ตัวแก้ปัญหา: - http01: ขาเข้า: คลาส: nginx
จากนั้นเรียกใช้kubectl ใช้ -f issuer.yaml
.
โปรดทราบว่าคุณอาจได้รับข้อผิดพลาด หากคุณรอ 1-2 นาทีแล้วลองอีกครั้งในขณะที่ cert-manager ลงทะเบียนตัวเอง
คุณสามารถตรวจสอบสถานะของผู้ออกได้ดังนี้:
kubectl อธิบาย clusterissuer/letsencrypt-prod
มองหามันจะกลายเป็นพร้อม
.
กำหนดค่า DNS
สำหรับบทช่วยสอนนี้ โดเมนon-k3s.dev
ถูกซื้อจาก Google Domains เพื่อแสดงตัวอย่างการทำงาน หากคุณใช้ผู้รับจดทะเบียนโดเมนรายอื่น หน้าจอต่อไปนี้จะดูคล้ายกันมาก
เมื่อคุณซื้อโดเมนของคุณแล้ว คุณต้องชี้ระเบียน DNS ไปที่โฮสต์ในคลัสเตอร์ k3s ที่ Nginx กำลังจะฟังบนพอร์ต 80 (HTTP) และพอร์ต 443 (HTTPS/TLS)
คุณสามารถค้นหาที่อยู่ IP ของคุณด้วย Civo Dashboard UI หรือพิมพ์ตัวอย่าง civo ls
ผ่านซีแอลไอ.
ติดตั้งรีจิสทรี
ในขั้นตอนนี้เราสามารถติดตั้งรีจิสทรีได้ แต่เราจะติดตั้งโดยไม่ใช้ความพยายาม หากคุณต้องการความคงอยู่ให้ดูภาคผนวกสำหรับวิธีการทำ
บันทึกต่อไปนี้เป็นติดตั้ง Registry.sh
:
ส่งออก SHA=$(head -c 16 /dev/urandom | shasum | cut -d " " -f 1)export USER=adminecho $USER > Registry-creds.txtecho $SHA >> Registry-creds.txtdocker run --entrypoint รีจิสทรี htpasswd:2 -Bbn ผู้ดูแลระบบ $SHA > ./htpasswdhelm ติดตั้งเสถียร/นักเทียบท่า-รีจิสทรี \ --name ทะเบียนส่วนตัว \ --namespace เริ่มต้น \ --setคงอยู่.เปิดใช้งาน=เท็จ \ --set secrets.htpasswd=$( แมว./htpasswd)
คุณจะต้องมีนักเทียบท่า
ติดตั้งและพร้อมสำหรับขั้นตอนนี้ ถ้ายังไม่เริ่ม ให้เริ่มเลย
จากนั้นเรียกใช้สคริปต์:
chmod +x install-registry.sh./install-registry.sh
มันจะติดตั้งรีจิสทรี Docker จากรีจิสทรีนักเทียบท่าแผนภูมิ.
ในภายหลัง เมื่อคุณต้องการใช้รีจิสทรี คุณสามารถค้นหาชื่อผู้ใช้และรหัสผ่านของคุณได้ในรีจิสทรี-creds.txt
ไฟล์.
รับใบรับรอง TLS สำหรับรีจิสทรี
ตอนนี้มารับใบรับรอง TLS สำหรับรีจิสทรี
บันทึกingress.yaml
แล้วแก้ไข:
---apiVersion: extensions/v1beta1kind: Ingressmetadata: ชื่อ: register namespace: คำอธิบายประกอบเริ่มต้น: certmanager.k8s.io/cluster-issuer: letsencrypt-prod kubernetes.io/ingress.class: "traefik" nginx.ingress.kubernetes.io /proxy-body-size: 50m ป้ายกำกับ: แอป: docker-registryspec: tls: - โฮสต์: - Registry.example.com secretName: Registry.example.com-cert กฎ: - โฮสต์: Registry.example.com http: เส้นทาง: - เส้นทาง: / แบ็กเอนด์: serviceName: private-registry-docker-registry servicePort: 5000
อัปเดตไฟล์:
- ทุกที่ที่คุณเห็น
Registry.example.com
ให้แทนที่ด้วยโดเมนของคุณ - หากใช้ Nginx ให้เปลี่ยนบรรทัดนี้:
kubernetes.io/ingress.class:
เพื่อพูด"นิงซ์"
หมายเหตุการตั้งค่าพิเศษ:.ingress.kubernetes.io/proxy-body-size: 50m
. ค่านี้สามารถปรับแต่งได้และอนุญาตให้จัดเก็บอิมเมจ Docker ขนาดใหญ่ในรีจิสตรี
ตอนนี้เรียกใช้:
kubectl ใช้ -f ingress.yaml
ตรวจสอบใบรับรอง
ตอนนี้ตรวจสอบใบรับรองด้วยสิ่งต่อไปนี้:
kubectl รับใบรับรอง -n defaultNAME READY SECRET AGEregistry.on-k3s.dev-cert True Registry.on-k3s.dev-cert 47 วินาที
สำหรับรายการใด ๆ ในรายการ คุณสามารถตรวจสอบสถานะกับkubectl อธิบาย
:
kubectl อธิบาย cert/registry.on-k3s.dev-certStatus: เงื่อนไข: เวลาเปลี่ยนล่าสุด: 2019-08-29T13:26:20Z ข้อความ: ใบรับรองเป็นปัจจุบันและยังไม่หมดอายุ เหตุผล: สถานะพร้อม: จริง ประเภท: พร้อม ไม่ใช่ หลัง: 11-2019 2019T12:26:18ZEเหตุการณ์: พิมพ์อายุเหตุผลจากข้อความ ---- ------ ---- ---- ------- ใบรับรองผู้จัดการ 64s ที่สร้างขึ้นตามปกติสร้างขึ้นใหม่ คีย์ส่วนตัว Normal GenerateSelfSigned 64s cert-manager สร้างใบรับรองชั่วคราวที่ลงนามด้วยตนเอง Normal OrderCreated 63s cert-manager สร้างทรัพยากรคำสั่งซื้อ "registry.on-k3s.dev-cert-3194477141" Normal OrderComplete 31s cert-manager Order "registry.on-k3s.dev -cert-3194477141" เสร็จสมบูรณ์ ปกติใบรับรอง CertIssued 31s cert-manager ออกเรียบร้อยแล้ว
มองหาคำแนะนำในสถานะและเหตุการณ์ส่วน
ตอนนี้เรามาทดสอบรีจิสทรีกัน
ส่งออก DOCKER_PASSWORD="" # เติมข้อมูลนี้ด้วยรหัสผ่านของคุณที่ใช้ข้างต้นexport DOCKER_USERNAME="admin"export SERVER="registry.example.com"echo $DOCKER_PASSWORD | เข้าสู่ระบบนักเทียบท่า $SERVER --ชื่อผู้ใช้ $DOCKER_USERNAME --รหัสผ่าน-stdin
แทนที่
ตัวอย่าง.คอม
ในคำสั่งข้างต้นกับโดเมนของคุณ
บางครั้งอาจใช้เวลาสักครู่เพื่อให้โดเมนใหม่ของคุณพร้อมใช้งาน หากเป็นโดเมนที่มีอยู่ บันทึก DNS ควรได้รับการซิงโครไนซ์แล้ว
เมื่อเข้าสู่ระบบแล้ว คุณสามารถแท็กรูปภาพจาก Docker Hub และส่งไปยังรีจิสทรีของคุณเอง
ส่งออก SERVER="registry.example.com" docker pull functions/figlet:latestdocker tag functions/figlet:latest $SERVER/functions/figlet:latestdocker push $SERVER/functions/figlet:latest
ตอนนี้เราสามารถเข้าสู่รีจิสตรีและพุชอิมเมจได้แล้ว เราต้องเปิดใช้งานสิ่งเดียวกันจากภายในคลัสเตอร์ของเรา สิ่งนี้ทำได้โดยการแนบความลับในการดึงรูปภาพเข้ากับบัญชีบริการของเนมสเปซ
ส่งออก DOCKER_PASSWORD="" # เติมข้อมูลนี้ด้วยรหัสผ่านของคุณที่ใช้ด้านบน ส่งออก DOCKER_USERNAME="admin"kubectl สร้างนักเทียบท่าลับ - รีจิสทรี my-private-repo \ --docker-username=$DOCKER_USERNAME \ --docker-password=$DOCKER_PASSWORD \ -- นักเทียบท่าเซิร์ฟเวอร์ = $SERVER \ --namespace เริ่มต้น
ตอนนี้แก้ไขบัญชีบริการและให้สิทธิ์ในการเข้าถึงข้อมูลลับ:
kubectl แก้ไขค่าเริ่มต้นของบัญชีบริการ -n ค่าเริ่มต้น
เพิ่มสิ่งต่อไปนี้และบันทึก:
imagePullSecrets:- ชื่อ: my-private-repo
หากต้องการตรวจสอบว่าพร้อมใช้งานใน Kubernetes ให้เรียกใช้สิ่งต่อไปนี้ฟังก์ชัน OpenFaaSซึ่งพิมพ์โลโก้ ASCII แล้วออก
ส่งออก SERVER=""kubectl run --rm -t -i figlet --restart Never --image $SERVER/functions/figlet:latest -- figlet Kubernetes _ __ _ _ | |/ / _| |__ ___ _ __ _ __ ___| |_ ___ ___ | ' / | | | '_ \ / _ \ '__| '_ \ / _ \ __/ _ \/ __|| . \ |_| | |_) | __/ | | | | | __/ || __/\__ \|_|\_\__,_|_.__/ \___|_| |_| |_|\___|\__\___||___/ pod "figlet" ถูกลบแล้ว
การดำเนินการนี้จะพิมพ์โลโก้ Kubernetes ในรูปแบบ ASCII จากนั้นจึงลบ Pod ที่ใช้เรียกใช้โค้ด
หากไม่ได้ผล ให้ค้นหาสาเหตุด้วยคำสั่งนี้:
kubectl รับเหตุการณ์ --sort-by=.metadata.creationTimestamp -n ค่าเริ่มต้น
การดำเนินการเพิ่มเติม (ภาคผนวก)
คุณสามารถดำเนินการเพิ่มเติมและเริ่มสำรวจกรณีการใช้งานขั้นสูงเพิ่มเติมสำหรับรีจิสทรีของคุณ
เปิดใช้งานการคงอยู่
เป็นสิ่งที่พึงประสงค์ แต่ไม่จำเป็นที่จะเปิดใช้งานการคงอยู่สำหรับรีจิสทรี เมื่อพร้อมใช้งาน การคงอยู่หมายความว่าหากรีจิสทรีขัดข้อง จะสามารถกู้คืนรูปภาพได้
มีสองเส้นทางในการเปิดใช้งานการคงอยู่
-
ใช้ S3 หรือบัคเก็ตที่เข้ากันได้กับ S3 S3 เป็นโปรโตคอลและมาตรฐานสำหรับจัดเก็บอ็อบเจกต์ คุณสามารถใช้ได้บัญชี AWSและ S3 เป็นข้อมูลสำรองสำหรับที่เก็บข้อมูลรีจิสทรีของคุณ หรือคุณสามารถทำได้ติดตั้ง Minio บนอินสแตนซ์ Civo ของคุณและใช้เป็นเป้าหมาย S3 แทน
-
ใช้ PersistentVolumes ใน Kubernetes Storage ใน Kubernetes มาในรูปของ Volumes เมื่อปริมาณไม่ชั่วคราว จะเรียกว่า PersistentVolumes หรือ (PVs) หากต้องการใช้ PV กับ k3 คุณจะต้องติดตั้งโครงการลองฮอร์นของแรนเชอร์.
แผนภูมิหางเสืออธิบายตัวเลือกสำหรับการใช้ PV หรือ S3:แผนภูมินักเทียบท่า-รีจิสทรี.
ห่อ
ขณะนี้เราได้สร้างคลัสเตอร์ Kubernetes โดยใช้ k3s และมีรีจิสทรีที่ใช้งานได้พร้อม TLS การตรวจสอบสิทธิ์ และ URL สาธารณะ
หางเสือให้แผนภูมิแก่เรา (ซอฟต์แวร์แพ็คเกจสำหรับ Kubernetes)รีจิสทรีนักเทียบท่าให้รีจิสทรีพร้อมการรับรองความถูกต้องแก่เราผู้จัดการใบรับรองให้ใบรับรอง TLS จาก LetsEncryptการจราจรถูกสร้างขึ้นใน k3s หรือเราใช้ Nginx บน Kubernetes ต้นทาง
ตอนนี้คุณสามารถแบ่งปันรีจิสทรีกับทีมของคุณหรือใช้ในไปป์ไลน์ CI/CD ของคุณโดยใช้เครื่องมือเช่น Jenkins เพื่อสร้างและจัดส่งอิมเมจ Docker คุณอาจต้องการลองติดตั้งซอฟต์แวร์อื่นเพื่อเริ่มสร้างแอปพลิเคชันบน Kubernetes เช่นOpenFaaS.