跳到内容

从私有容器镜像仓库部署镜像

您可以配置您的 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 服务账号。

    注意

    默认情况下,除非指定了serviceAccountName,否则您的 Knative 集群中每个命名空间中的 default 服务账号都会被您的修订版本使用。

    例如,如果您将密钥命名为 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 共享以达到此目的。了解更多。