AKS 无法从 GitHub 私有注册表中提取镜像,但 Minikube 可以提取相同的镜像

AKS cannot pull image from GitHub Private registry but Minikube could pull the same one

我正在尝试构建应用程序,但是当我尝试创建部署时,容器在创建阶段失败并出现错误:

   "docker.pkg.github.com/XXXXX/XXXXXX/XXXXXXXXXXXX:latest": rpc error: code = NotFound desc = failed to pull and unpack image "docker.pkg.github.com/XXXXX/XXXXXXX/XXXXXXXXXX:latest": failed to copy: httpReaderSeeker: failed open: content at https://docker.pkg.github.com/v2/XXXXXXX/XXXXXX/XXXXXXX/manifests/sha........ not found: not found

我完全按照本教程进行操作:https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/

我在云端shell和我的本地机器上都尝试了 kubectl,同样的问题:

然后我在我的本地机器上尝试了 minikube,并使用 YAML 进行部署,并且部署创建没有任何问题。此外,docker pull 也在工作。我想那应该不是 github 凭据问题。

我真的想不通 kubernetes 在 azure 和 minikube 上表现如此不同的原因。非常感谢任何有关如何排查和解决此问题的帮助。

仅供参考,我使用下面的 shell cmd 在 Azure 上创建资源,想知道我是否遗漏了任何步骤:

 az group create \
     --name $RESOURCE_GROUP \
     --location $REGION_NAME
    
 az network vnet create \
     --resource-group $RESOURCE_GROUP \
     --location $REGION_NAME \
     --name $VNET_NAME \
     --address-prefixes 10.0.0.0/8 \
     --subnet-name $SUBNET_NAME \
     --subnet-prefixes 10.240.0.0/16
    
 SUBNET_ID=$(az network vnet subnet show \
     --resource-group $RESOURCE_GROUP \
     --vnet-name $VNET_NAME \
     --name $SUBNET_NAME \
     --query id -o tsv)
    
 VERSION=$(az aks get-versions \
     --location $REGION_NAME \
     --query 'orchestrators[?!isPreview] | [-1].orchestratorVersion' \
     --output tsv)
    
 az aks create \
     --resource-group $RESOURCE_GROUP \
     --name $AKS_CLUSTER_NAME \
     --vm-set-type VirtualMachineScaleSets \
     --node-count 1 \
     --load-balancer-sku standard \
     --location $REGION_NAME \
     --kubernetes-version $VERSION \
     --network-plugin azure \
     --vnet-subnet-id $SUBNET_ID \
     --service-cidr 10.2.0.0/24 \
     --dns-service-ip 10.2.0.10 \
     --docker-bridge-address 172.17.0.1/16 \
     --generate-ssh-keys

echo 'xxxxxxx' | docker login https://docker.pkg.github.com -u xxxxxxx --password-stdin

失败是因为最新版本的 AKS(1.20 或更高版本)已弃用 docker 作为容器运行时(改为使用 ContainerD)。我切换到旧版本1.18后,问题解决了。