gpt4 book ai didi

docker - 将 docker 镜像推送到使用 microk8s 插件安装的注册表

转载 作者:行者123 更新时间:2023-12-02 12:29:45 26 4
gpt4 key购买 nike

我在我的工作站上运行多节点 k8s 集群。我已经使用多 channel 创建了 VM。 K8s 集群使用 microk8s 部署。

Microk8s 提供私有(private)注册表作为 addon .

它为注册表提供 32000 作为节点端口。

我想远程连接到这个集群并将 docker 镜像推送到这个注册表。

我已添加 172.**.44.***:32000在我的远程 PC 的 docker 设置中作为不安全的注册。

注:172.**.44.***是集群的 IP(你在 kubectl cluster-info 中得到的东西)

但我无法让它工作

docker build -t 172.**.44.***:32000/myapp:v1 .
docker push 172.**.44.***:32000/myapp:v1
Get http://172.**.44.***:32000/v2/: dial tcp 172.**.44.***:32000: connect: no route to host

我没用 microk8s之前设置过kubernetes集群,但是我确实有感觉, 172.xx.xx.xx的ip是错误的IP,您无法从本地PC 连接它。

那么以下命令的输出是什么:
  • 什么是节点 IP,包括主节点和工作节点?
  • kubernetes get nodes -o wide
  • 服务设置是什么?
  • kuberentes get services

    您能否确保该私有(private)注册表服务器端口的服务已设置并且可以连接。
  • 查看自己电脑的IP
  • # for windows
    ipconfig

    # for linux/macos
    ifconfig

    可能输出中有很多 IP,请确保为您的 PC 获取正确的本地 IP。

    例如,它类似于 10.xx.xx.xx ,那么你应该使用类似的IP连接到那个私有(private)注册服务器,你只需要找到它
  • 查看你使用的是什么网络CNI,weavenet、flannel等
  • 172.xx.xx.xx的IP主要由这些网络 CNI 提供商使用,它可以在 kubernetes 集群中使用,但不能在您的本地主机中使用。

    最佳答案

    在 microk8s 上启用注册表后,运行此脚本

    kubectl get svc -n container-registry

    你可以看到 microk8s 已经将注册服务的端口 32000 重定向到 5000 ,然后我使用 ingress 通过 https 公开。

    首先,您必须在 microk8s 上启用 ingress:
    microk8s.enable ingress

    然后,如果你想使用 https ,你必须创建一个 tls sceret :

    openssl genrsa -aes128 -out server.key 2048

    openssl req -newkey rsa:2048 -nodes -keyout server.key -x509 -days 3650 -out server.crt

    kubectl create secret tls registry-secret-tls --cert=server.crt --key=server.key -n container-registry

    然后使用 kubectl apply -f 创建一个 ingress 用于 registry 服务的反向代理。

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
    name: registry
    namespace: container-registry
    annotations:
    nginx.ingress.kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/proxy-body-size: "500m"
    nginx.ingress.kubernetes.io/proxy-pass-headers: "Location"
    spec:
    tls:
    - hosts:
    - ingress.local
    secretName: registry-secret-tls
    rules:
    - host: ingress.local
    http:
    paths:
    - path: /
    backend:
    serviceName: registry
    servicePort: 5000

    然后,将 127.0.0.1 ingress.local 添加到 /etc/hosts 文件中。
    最后,使用 buildah 将 docker 镜像推送到 ingress.local

    buildah push --tls-verify=false 44c92e82c220 docker://ingress.local/datacenter-school

    这一次,看起来一切正常。但是当我在microk8s中尝试list images时,找不到我刚刚推送的图像。

    microk8s.ctr images ls -q |grep datacenter-school

    安静的很奇怪!

    关于docker - 将 docker 镜像推送到使用 microk8s 插件安装的注册表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59804772/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com