简体   繁体   中英

Docker local private registry in minikube using the docker driver

Question

How to run a local Docker private registry in minikube while using the docker driver? ( --driver=docker )

The issue

Connection refused when pushing images to private registry

docker push docker-registry.kubemaster.me/docker-cats:latest

# Results
The push refers to repository [docker-registry.kubemaster.me/docker-cats]
Get http://docker-registry.kubemaster.me/v2/: dial tcp 127.0.0.1:80: connect: connection refused

My Setup

Minikube on Windows WSL2 using minikube's docker driver .

minikube start --driver=docker --kubernetes-version=v1.20.2

I've deployed nginx-ingress-controller which listens on ports 80 and 443. The application is available via both HTTP and HTTPS (using cert-manager for TLS certificates). And of course, I added 127.0.0.1 docker-registry.kubemaster.me to my C:\Windows\System32\drivers\etc\hosts file.

NOTE : I'm running minikube tunnel in the background, this is why it's possible to communicate with the whole cluster from the host via nginx-ingress-controller.

Accessing the local registry

  • From the Windows Host

    从 Windows 主机访问

  • From the WSL2 Ubuntu guest machine.

     curl http://docker-registry.kubemaster.me/v2/_catalog

    从 ubuntu-guest 访问

  • From minikube's docker container

    docker exec -it minikube bash root@minikube:/$ curl http://docker-registry.kubemaster.me/v2/_catalog

    从 minikube 容器访问

  • Pushing from minikube's docker container

    docker exec -it minikube bash root@minikube:/$ docker push docker-registry.kubemaster.me/docker-cats Using default tag: latest The push refers to repository [docker-registry.kubemaster.me/docker-cats] 346be19f13b0: Layer already exists 935f303ebf75: Layer already exists 0e64bafdc7ee: Pushed latest: digest: sha256:5403064f94b617f7975a19ba4d1a1299fd584397f6ee4393d0e16744ed11aab1 size: 943

YAML - Deployment, Service and Ingress

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    k8s-app: docker-registry
  name: docker-registry
  namespace: kube-system
spec:
  replicas: 1
  selector:
    matchLabels:
      k8s-app: docker-registry
  template:
    metadata:
      labels:
        k8s-app: docker-registry
    spec:
      containers:
        - image: registry:2
          imagePullPolicy: Always
          name: docker-registry
          env:
            - name: REGISTRY_HTTP_SECRET
              value: "some-secret"
            - name: REGISTRY_HTTP_ADDR
              value: "0.0.0.0:80"
          ports:
            - containerPort: 80
              hostPort: 80
              protocol: TCP
          resources:
            limits:
              memory: 400Mi
              cpu: "200m"
            requests:
              memory: 200Mi
              cpu: 100m
---
apiVersion: v1
kind: Service
metadata:
  labels:
    k8s-app: docker-registry
  name: docker-registry
  namespace: kube-system
spec:
  type: LoadBalancer
  ports:
    - name: http
      port: 80
      protocol: TCP
      targetPort: 80
  selector:
    k8s-app: docker-registry
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: docker-registry
  namespace: kube-system
  annotations:
    nginx.ingress.kubernetes.io/proxy-body-size: 2000m # support large images
spec:
  ingressClassName: nginx
  rules:
    - host: docker-registry.kubemaster.me
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              serviceName: docker-registry
              servicePort: 80

PS- My setup of how to deploy a local Kubernetes cluster for development purposes - https://github.com/unfor19/kubernetes-localdev

Dropped this idea, instead, I'm using minikube's Docker daemon by executing

eval $(minikube docker-env)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM