首页 / 平台管理 / 集群管理 / 集群 / 常见问题 / 配置平台默认镜像仓库以支持业务集群的外网访问

配置平台默认镜像仓库以支持业务集群的外网访问

在平台上创建或者接入业务集群时,集群中的节点需要通过访问 平台默认 的镜像仓库(global 部署时配置)获取所需的组件镜像。

若业务集群的节点无法访问 平台默认 的镜像仓库,可参考本文为平台默认镜像仓库配置一个业务集群可访问的地址。在集群创建或接入时,通过设置 镜像仓库 参数,确保集群中的节点能够通过该地址访问 平台默认 镜像仓库。

场景示例

部署平台时,使用内网地址部署 global。在平台运行期间,需要将外部网络中的某个业务集群(例如:公有云 Kubernetes 集群、其他边缘集群)接入平台管理时,业务集群只能通过公网对接平台的默认镜像仓库,获取所需的组件镜像。

此时,可参考本文提供的方案,为平台的默认镜像仓库添加一个外网业务集群可访问的地址,即可满足外网业务集群对接平台默认镜像仓库的需求,又可避免重新部署平台或修改平台镜像仓库地址所带来的的成本和风险。

前提条件

请提前准备好业务集群可访问的 域名域名指向的 IP 地址 及域名对应的 合法证书

注意

为平台默认镜像仓库配置证书及路由规则

  1. 将域名的合法证书拷贝至 global 集群的任一控制节点。

  2. 执行以下命令行,在平台上创建保存了域名合法证书的证书(registry-address.tls)。

    kubectl  create secret tls registry-address.tls --cert=<域名的证书名称> --key=<域名的证书的 key> -n kube-system

    示例:

    kubectl  create secret tls registry-address.tls --cert=custom.crt --key=custom.key -n kube-system

    提示:证书创建成功后,可在 global 集群的 kube-system 命名空间下查看 registry-address.tls 证书的信息(包含有效期),请在证书到期前及时更换。

  3. 在 global 集群的任一控制节点上,执行以下命令行,创建 ingress 规则。

    REGISTRY_DOMAIN_NAME=<www.registry.com> #需替换为业务集群可访问的域名
    cat << EOF | kubectl create -f -
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      annotations:
        nginx.ingress.kubernetes.io/backend-protocol: HTTPS
      name: registry-address
      namespace: kube-system
      labels:
        service_name: registry
    spec:
      rules:
        - host: $REGISTRY_DOMAIN_NAME
          http:
            paths:
              - backend:
                  service:
                    name: registry
                    port:
                      number: 443
                path: /v2/
                pathType: ImplementationSpecific
              - backend:
                  service:
                    name: registry
                    port:
                      number: 443
                path: /v2/_catalog
                pathType: ImplementationSpecific
              - backend:
                  service:
                    name: registry
                    port:
                      number: 443
                path: /v2/.+/tags/list
                pathType: ImplementationSpecific
              - backend:
                  service:
                    name: registry
                    port:
                      number: 443
                path: /v2/.+/manifests/[A-Za-z0-9_+.-:]+
                pathType: ImplementationSpecific
              - backend:
                  service:
                    name: registry
                    port:
                      number: 443
                path: /v2/.+/blobls/[A-Za-z0-9-:]+
                pathType: ImplementationSpecific
              - backend:
                  service:
                    name: registry
                    port:
                      number: 443
                path: /v2/.+/blobls/uploads/[A-Za-z0-9-:]+
                pathType: ImplementationSpecific
              - backend:
                  service:
                    name: registry
                    port:
                      number: 443
                path: /auth/token
                pathType: ImplementationSpecific
      tls:
        - secretName: registry-address.tls
          hosts:
            - $REGISTRY_DOMAIN_NAME
    EOF

    说明:得到类似如下示例中的回显时,表明 ingress 创建成功。

    ... created
  4. 在 global 集群的其中一个 master 节点上,执行以下命令检查是否存在 Registry 的 Service 资源。

    kubectl -n kube-system get svc |grep registry

    若 Service 不存在,使用如下命令创建 Service。

    cat << EOF | kubectl create -f -
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        name: registry
        service_name: registry
      name: registry
      namespace: kube-system
    spec:
      ports:
        - protocol: TCP
          port: 443
          targetPort: 60080
      selector:
        component: registry
      type: ClusterIP
    EOF
  5. 在任意节点通过域名登录镜像仓库,请替换 <镜像仓库域名> 参数后,测试拉取镜像。

    crictl pull <镜像仓库域名>/automation/qaimages:helloworld

    docker pull <镜像仓库域名>/automation/qaimages:helloworld

为业务集群配置镜像仓库

为镜像仓库配置证书和路由规则之后,镜像仓库已准备完成,您可根据相应场景,在创建/接入集群时为业务集群添加本仓库,或为已创建的集群配置镜像仓库。