2

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

Microk8s 提供私有注册表作为插件

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

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

172.**.44.***:32000我在远程电脑的 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集群,但是感觉是ip的ip172.xx.xx.xx不对,本地电脑连接不上。

那么以下命令的输出是什么:

  1. 什么是节点 IP,包括主节点和工作节点?
kubernetes get nodes -o wide
  1. 服务设置是什么?
kuberentes get services

您能否确保该私有注册表服务器端口的服务已设置并且可以连接。

  1. 检查你自己电脑的IP
# for windows
ipconfig

# for linux/macos
ifconfig

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

例如,它是这样的10.xx.xx.xx,那么你应该使用类似的 IP 来连接到那个私有注册服务器,你只需要找到它

  1. 检查您使用的网络 CNI,weavenet、flannel 等。

这些网络 CNI 提供商使用的 IP172.xx.xx.xx主要是在 kubernetes 集群中使用,但不能在您的本地主机中使用。

4

1 回答 1

2

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

kubectl get svc -n container-registry

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

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

microk8s.enable ingress

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

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

安静的很奇怪!

于 2020-03-09T15:59:52.553 回答