minikube 和 azure 容器注册表

问题描述 投票:0回答:4

我正在尝试从 Azure 容器注册表获取 minikube 中的图像。这一直失败,因为它没有说未经授权。 未经授权:需要身份验证

我使用 kubectl create Secret 添加注册表的凭据,但它一直失败。

到目前为止我尝试过的:

  • 我添加了带 https 和不带 https 的 URL
  • 我添加了admin用户并制定了新的服务原则
  • 我尝试将机密添加到默认服务帐户,希望 yaml 出现问题
  • 使用 minikube ssh 看看是否可以使用 docker login 和 docker pull (有效)。

有点绝望我接下来可以尝试什么?我怎样才能更好地解决这个问题?

minikube
4个回答
4
投票

kubectl create secret
命令应该生成一个~/.dockercfg文件,该文件用于针对后续的
docker push
docker pull
请求向注册表进行身份验证。

鉴于您的

docker login
docker pull
命令有效,我怀疑您可能在错误的命名空间中创建了您的秘密。

Pod 只能在自己的命名空间中引用镜像拉取机密,因此每个命名空间需要执行一次此过程。

https://kubernetes.io/docs/concepts/containers/images/#using-azure-container-registry-acr


2
投票

您可以创建一个秘密并将其保存在您的 kubernetes 上下文中(在您的情况下为 minikube 上下文)。

  1. 首先,通过运行
    kubectl config get-contexts
    kubectl config use-context minikube
    更改为 minikube 上下文,确保您指向正确的上下文。
  2. 通过运行
    kubectl create secret docker-registry acr-secret --docker-server=<your acr server>.azurecr.io --docker-username=<your acr username> --docker-password=<your acr password>
    在 minikube 上下文中创建秘密。此命令生成 acr-secret
  3. 使用每个 template.spec 标签内的 imagePullSecrets 将
    acr-secret
    导入到部署 yml 文件中:
    imagePullSecrets:
      - name: acr-secret

0
投票

我认为有一个更简单的答案。首先您需要安装 Azure CLI 并登录

az login

之后,您可以获得 Azure 容器注册表的凭据

az acr login -n yoursupercoolregistry.azurecr.io --expose-token

这会给你类似的东西:

{
  "accessToken": "averylongtoken",
  "loginServer": "yoursupercoolregistry.azurecr.io"
}

使用此信息,您可以启用注册表信用并配置 Docker 注册表(而不是 Azure 容器注册表)

minikube addons enable registry-creds
minikube addons configure registry-creds

您必须输入您的服务器 URL 和

00000000-0000-0000-0000-000000000000
作为客户端 ID。

Do you want to enable Docker Registry? [y/n]: y
-- Enter docker registry server url: yoursupercoolregistry.azurecr.io
-- Enter docker registry username: 00000000-0000-0000-0000-000000000000

最后将令牌粘贴到命令行中,按 Enter 键,您应该会得到这个

✅  registry-creds was successfully configured

然后将

imagePullSecrets
添加到您的文件中

    spec:
      containers:
      - name: supercoolcontainer
        image: yoursupercoolregistry.azurecr.io/supercoolimage:1.0.2
      imagePullSecrets:
      - name: dpr-secret

0
投票

在使用 Airflow 的 kubernetespod 操作符启动任务并从 azure 容器注册表中提取映像时,我遇到了类似的问题。对我有用的是在 azure 门户上的存储库权限下设置一个令牌,并使用该令牌在正确的命名空间中设置机密。有关创建令牌以访问 azure 存储库图像的微软文档

docker 用户名应设置为令牌的名称 并且 docker 密码应设置为门户上生成的密码。

kubectl create secret docker-registry acr-secret -n namespace --docker-server=myregistry.azurecr.io --docker-username=<token-name>    --docker-password=<my-password-generated-online>

我之前设置用于访问 azure 门户的用户名和密码的方法是因为 kubernetes docker 密钥不正确。

完成后,我还必须更新我的代码以包含 image_pull_secrets 参数。

from kubernetes.client import models as k8s

run_task = KubernetesPodOperator(
 namespace=namespace,
 image=f"myregistry.azurecr.io/image-name:{image_version}",
 image_pull_policy="Always",
 image_pull_secrets=[k8s.V1LocalObjectReference("acr-secret")],
 name=f"run_my_task",
 task_id=f"run_my_task",
 get_logs=True,
)
© www.soinside.com 2019 - 2024. All rights reserved.