跳至内容

从私有容器注册表部署镜像

您可以配置您的 Knative 集群,以从跨多个服务和修订版本的私有注册表部署镜像。为此,您必须使用注册表凭据创建一个 Kubernetes 密钥列表 (imagePullSecrets)。然后,您必须将这些密钥添加到所有服务的默认 服务帐户,或单个服务的修订模板中。

先决条件

  • 您必须有一个安装了 Knative Serving 的 Kubernetes 集群。
  • 您必须能够访问存储容器镜像的私有容器注册表的凭据。

步骤

  1. 创建一个包含您的凭据的 imagePullSecrets 对象,作为密钥列表

    kubectl create secret docker-registry <registry-credential-secrets> \
      --docker-server=<private-registry-url> \
      --docker-email=<private-registry-email> \
      --docker-username=<private-registry-user> \
      --docker-password=<private-registry-password>
    

    其中

    • <registry-credential-secrets> 是您要用于密钥的名称(imagePullSecrets 对象)。例如,container-registry

    • <private-registry-url> 是存储容器镜像的私有注册表的 URL。示例包括 Google Container RegistryDockerHub.

    • <private-registry-email> 是与私有注册表关联的电子邮件地址。

    • <private-registry-user> 是您用来访问私有容器注册表的用户名。

    • <private-registry-password> 是您用来访问私有容器注册表的密码。

    示例

    kubectl create secret docker-registry container-registry \
      --docker-server=https://gcr.io/ \
      --docker-email=my-account-email@address.com \
      --docker-username=my-grc-username \
      --docker-password=my-gcr-password
    
  2. 可选。创建 imagePullSecrets 对象后,您可以通过运行以下命令来查看密钥

    kubectl get secret <registry-credential-secrets> -o=yaml
    
  3. 可选。将 imagePullSecrets 对象添加到 default 命名空间中的 default 服务帐户。

    注意

    默认情况下,您的 Knative 集群的每个 命名空间 中的 default 服务帐户将由您的修订版本使用,除非指定了 serviceAccountName

    例如,如果您将密钥命名为 container-registry,您可以运行以下命令来修改 default 服务帐户

    kubectl patch serviceaccount default -p "{\"imagePullSecrets\": [{\"name\": \"container-registry\"}]}"
    

    现在,在 default 命名空间中创建的新 Pod 包含您的凭据,并且可以访问私有注册表中的容器镜像。

  4. 可选。将 imagePullSecrets 对象添加到服务

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: hello
    spec:
      template:
        spec:
          imagePullSecrets:
          - name: <secret-name>
          containers:
            - image: ghcr.io/knative/helloworld-go:latest
              ports:
                - containerPort: 8080
              env:
                - name: TARGET
                  value: "World"
    

我们使用分析和 Cookie 来了解网站流量。您的网站使用信息将为此目的与 Google 共享。 了解更多。