配置私有容器注册表

本页面介绍了如何为 Google Distributed Cloud for VMware(纯软件)配置现有的容器注册表服务器。

本页面适用于设置、监控和管理技术基础架构的管理员、架构师和运维人员。如需详细了解我们在 Google Cloud 内容中提及的常见角色和示例任务,请参阅常见的 GKE Enterprise 用户角色和任务

概览

默认情况下,在创建或升级集群期间,Google Distributed Cloud 会使用组件访问服务账号gcr.io/gke-on-prem-release 拉取系统映像。或者,您可以提供自己的容器注册表服务器,以便改为从您的私有注册表服务器拉取系统映像。

Google Distributed Cloud 不支持不安全的容器注册表。启动容器注册表服务器时,您必须提供证书和密钥。证书可由公共证书授权机构 (CA) 签名,也可以自签名。

创建容器注册表服务器

如需了解如何创建容器注册表服务器,请参阅 Docker 文档中的运行可外部访问的注册表

配置注册表

如需使用私有容器注册表,您可以使用 gkectl 命令行工具或 Terraform。

gkectl

在创建集群之前,将 privateRegistry 部分添加到管理员集群配置文件中。

填写此部分后:

  • 在创建或升级集群之前运行 gkectl prepare 命令时,该命令会从管理员集群配置文件的 bundlePath 字段中指定的 tar 文件中提取映像,并将映像推送到您的私有注册表服务器。

  • 在创建或升级集群期间,系统会从您的私有注册表服务器中拉取系统映像。

Terraform

  1. 按照创建管理员集群的 Terraform 标签页中的步骤填写管理员集群配置文件。

  2. 将以下部分添加到管理员集群配置文件中:

    private_registry_config {
      address = "ADDRESS"
      ca_cert = "CA_CERT"
    }
    

    替换以下内容:

    • "ADDRESS":运行您的私有注册表的机器的 IP 地址或 FQDN(完全限定域名)。

    • "CA_CERT":私有注册表的 CA 证书公钥。

  3. 继续执行创建管理员集群的 Terraform 标签页中的步骤,以验证 Terraform 配置文件和方案,然后创建引导集群。

  4. 运行 gkectl register bootstrap 命令时,gkectl 会提示您输入私有注册表的用户名和密码。

在创建集群期间,系统会从您的私有注册表服务器拉取系统映像。

高级集群和完整软件包的限制

Google Distributed Cloud 有两种软件包可供选择:完整和常规。如需确定哪个软件包位于管理员工作站上,请检查管理员集群配置文件中的 bundlePath 字段。如果文件名以 -full 结尾,则表示完整软件包位于管理员工作站上。如果文件名不以 -full 结尾,则表示常规软件包位于管理员工作站上。

如果您使用 gkeadm 命令创建了管理员工作站,则该命令会创建包含完整软件包的管理员工作站虚拟机,并在管理员集群配置文件中配置 bundlePath 字段。

如果启用了高级集群,则将完整软件包与私有注册表搭配使用时会受到以下限制:

  • 版本 1.31:私有注册表不支持完整软件包。如需在高级集群上使用私有注册表,请执行以下操作:

    1. 将常规大小的软件包下载到管理员工作站。
    2. 更新管理员集群配置文件的 bundlePath 字段中的文件名。
  • 版本 1.32:支持使用完整软件包,但 gkectl prepare 命令会从 gcr.io/gke-on-prem-release(而非 tar 文件)拉取映像。不过,该命令会将映像推送到您的私有注册表,以便在创建或升级集群期间从您的私有注册表中拉取系统映像。

验证映像是否是从您的注册表服务器中拉取的

验证是否从注册表服务器中拉取映像的方式取决于是否已启用高级集群。

  • 如果未启用高级集群,请运行以下命令:

    kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get pods \
        --all-namespaces -o jsonpath="{.items[*].spec['initContainers', 'containers'][*].image}"
    

    ADMIN_CLUSTER_KUBECONFIG 替换为管理员集群的 kubeconfig 文件的路径。

    此命令的输出将显示集群中的所有映像。您可以验证所有 Google Distributed Cloud 映像是否均来自您自己的注册表服务器。

  • 如果已启用高级集群,请执行以下步骤:

    可以通过检查名为 config.toml 的文件的内容来确定 containerd 是否从本地注册表拉取映像,如以下步骤所示:

    1. 登录节点并检查以下 /etc/containerd/config.toml 文件的内容。
    2. 检查 config.toml 文件的 plugins."io.containerd.grpc.v1.cri".registry.mirrors 字段,查看您的注册表服务器是否列在 endpoint 字段中。

      以下代码摘自示例 config.toml 文件。

      version = 2
      root = "/var/lib/containerd"
      state = "/run/containerd"
      ...
      [plugins."io.containerd.grpc.v1.cri".registry]
      [plugins."io.containerd.grpc.v1.cri".registry.configs]
      [plugins."io.containerd.grpc.v1.cri".registry.configs."gcr.io"]
      [plugins."io.containerd.grpc.v1.cri".registry.configs."privateregistry2.io".tls]
      ca_file = '/etc/containerd/certs.d/privateregistry2.io/ca.crt'
      [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
      [plugins."io.containerd.grpc.v1.cri".registry.mirrors."gcr.io"]
      endpoint = ["http://privateregistry.io", "http://privateregistry2.io"]
      ...
      
    3. 如果您的注册表镜像显示在 endpoint 字段中,则节点会从注册表镜像中拉取映像,而不是从 Artifact Registry 中拉取映像。