首页 > 解决方案 > 无法访问 azure kubernetes 的服务

问题描述

我正在尝试配置 azure kubernetes 集群并在 portal.dockerized .net core webapi 项目上创建了一个,并将图像发布到 azure container register。应用清单文件后,我得到了创建服务的消息以及外部 IP。但是,当我确实获得豆荚时,我一直都处于“待处理”状态

  NAME                           READY     STATUS    RESTARTS   AGE
  kubdemo1api-6c67bf759f-6slh2   0/1       Pending   0          6h

这是我的 yaml 清单文件,有人可以建议这里有什么问题吗?

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: kubdemo1api
labels:
  name: kubdemo1api
spec:
  replicas: 1
strategy:
  rollingUpdate:
  maxSurge: 1
  maxUnavailable: 1
type: RollingUpdate
 minReadySeconds: 30
selector:
matchLabels:
  app: kubdemo1api
template:
metadata:
  labels:
    app: kubdemo1api
    version: "1.0"
    tier: backend
spec:
  containers:
  - name: kubdemo1api
    livenessProbe:
      httpGet:
        path: /
        port: 80
      initialDelaySeconds: 30
      timeoutSeconds: 10
    readinessProbe:
      httpGet:
        path: /
        port: 80
      initialDelaySeconds: 30
      timeoutSeconds: 10
    image: my container registry image address
    resources:
      requests:
        cpu: 100m
        memory: 100Mi
    ports:
    - containerPort: 80
    livenessProbe:
      httpGet:
        path: /
        port: 80
      initialDelaySeconds: 30
      timeoutSeconds: 10
    readinessProbe:
      httpGet:
        path: /
        port: 80
      initialDelaySeconds: 30
      timeoutSeconds: 10
--- 
apiVersion: v1
kind: Service
metadata: 
  name: azkubdemoapi1
spec: 
  ports: 
- 
  port: 80
selector: 
  app: kubdemo1api
  type: LoadBalancer

编辑:输出 kubectl describe pods 是这个

就这个

Normal   Scheduled  2m                default-scheduler                  Successfully assigned default/kubdemo1api-697d5655c-64fnj to aks-agentpool-87689508-0
  Normal   Pulling    37s (x4 over 2m)  kubelet, aks-agentpool-87689508-0  pulling image "myacrurl/azkubdemo:v2"
  Warning  Failed     37s (x4 over 2m)  kubelet, aks-agentpool-87689508-0  Failed to pull image "my acr url": [rpc error: code = Unknown desc = Error response from daemon: Get https://myacrurl/v2/azkubdemo/manifests/v2: unauthorized: authentication required, rpc error: code = Unknown desc = Error response from daemon: Get https://myacrurl/v2/azkubdemo/manifests/v2: unauthorized: authentication required]
  Warning  Failed     37s (x4 over 2m)  kubelet, aks-agentpool-87689508-0  Error: ErrImagePull
  Normal   BackOff    23s (x6 over 2m)  kubelet, aks-agentpool-87689508-0  Back-off pulling image "myacrlurl/azkubdemo:v2"
  Warning  Failed     11s (x7 over 2m)  kubelet, aks-agentpool-87689508-0  Error: ImagePullBackOff

标签: azurekubernetesazure-aks

解决方案


对于您提供的错误,它表明您必须进行身份验证才能从 Azure 容器注册表中提取映像。

实际上,您只需要拉取图像的权限,acrpull角色就足够了。有两种方法可以实现它。

一种是仅授予 AKS 对 Azure 容器注册表的访问权限。这是我这边最简单的。只需为 AKS 使用的服务主体创建角色分配。有关整个步骤,请参阅授予 AKS 对 ACR 的访问权限。

另一种是使用 Kubernetes 密钥。它比第一个复杂一点。您需要创建一个与使用的 AKS 不同的新服务主体并授予对它的访问权限,然后使用该服务主体创建 kubernetes 机密。有关整个步骤,请参阅使用 Kubernetes 密钥访问。


推荐阅读