使用docker驱动程序在minikube中使用Docker本地私有注册表 [英] Docker local private registry in minikube using the docker driver

查看:113
本文介绍了使用docker驱动程序在minikube中使用Docker本地私有注册表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问题

如何在使用docker驱动程序时在minikube中运行本地Docker私有注册表?(-driver = docker )

问题

将图像推送到私有注册表时,

连接被拒绝

  docker push docker-registry.kubemaster.me/docker-cats:latest# 结果推送指向存储库[docker-registry.kubemaster.me/docker-cats]获取http://docker-registry.kubemaster.me/v2/:拨打tcp 127.0.0.1:80:connect:连接被拒绝 

我的设置

在Windows WSL2上使用

  • WSL2 Ubuntu 来宾计算机上.

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

  • minikube的Docker容器

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

  • minikube的Docker容器中推送

      docker exec -it minikube bashroot @ minikube:/$ docker push docker-registry.kubemaster.me/docker-cats使用默认标签:最新推送指向存储库[docker-registry.kubemaster.me/docker-cats]346be19f13b0:图层已存在935f303ebf75:图层已经存在0e64bafdc7ee:已推送最新:摘要:sha256:5403064f94b617f7975a19ba4d1a1299fd584397f6ee4393d0e16744ed11aab1大小:943 

  • YAML-部署,服务和入口

      apiVersion:apps/v1种类:部署元数据:标签:k8s-app:泊坞窗注册表名称:docker-registry命名空间:kube-system规格:复制品:1选择器:matchLabels:k8s-app:泊坞窗注册表模板:元数据:标签:k8s-app:泊坞窗注册表规格:容器:-图片:注册表:2imagePullPolicy:始终名称:docker-registry环境:-名称:REGISTRY_HTTP_SECRET值:一些秘密";-名称:REGISTRY_HTTP_ADDR值:"0.0.0.0:80";端口:-containerPort:80hostPort:80协议:TCP资源:限制:内存:400Micpu:"200m"要求:内存:200Micpu:100m---apiVersion:v1种类:服务元数据:标签:k8s-app:泊坞窗注册表名称:docker-registry命名空间:kube-system规格:类型:LoadBalancer端口:-名称:http端口:80协议:TCPtargetPort:80选择器:k8s-app:泊坞窗注册表---apiVersion:networking.k8s.io/v1beta1种类:入口元数据:名称:docker-registry命名空间:kube-system注释:nginx.ingress.kubernetes.io/proxy-body-size:2000m#支持大图像规格:ingressClassName:nginx规则:-主机:docker-registry.kubemaster.mehttp:路径:- 小路:/pathType:前缀后端:serviceName:泊坞窗注册表servicePort:80 

    PS-我为如何出于开发目的部署本地Kubernetes集群的设置- https://github.com/unfor19/kubernetes-localdev

    解决方案

    我放弃了这个想法,而是通过执行

    来使用minikube的Docker守护程序.

      eval $(minikube docker-env) 

    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

    • From the WSL2 Ubuntu guest machine.

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

    • From minikube's docker container

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

    • 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
    

    P.S- 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)
    

    这篇关于使用docker驱动程序在minikube中使用Docker本地私有注册表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆