Службы с azure kubernetes недоступны

#azure #kubernetes #azure-aks

#azure #kubernetes #azure-aks

Вопрос:

Я пытаюсь настроить кластер azure kubernetes и создал его на портале.настроил проект .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 — это

вот оно

 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
  

Комментарии:

1. можете ли вы поделиться результатами kubectl describe pod kubdemo1api-6c67bf759f-6slh2

2. добавлено в вопрос

3. Ошибка показывает, что вам необходимо пройти аутентификацию в вашем реестре, чтобы извлечь изображение. Вы можете использовать imagePullSecrets для аутентификации в своем реестре. Смотрите пример ACR .

4. Есть еще вопросы? Или, если совет сработает для вас, я бы добавил ответ для других, кто сталкивается с такой же проблемой. Пожалуйста, сообщите мне результат.

5. аутентификация с использованием imagePullSecrets выполнила свою работу за меня. однако перед этим мне пришлось создать secret в кластере, доступном для использования узлами.

Ответ №1:

Что касается ошибки, которую вы предоставляете, это показывает, что вам необходимо пройти аутентификацию, чтобы извлечь изображение из реестра контейнеров Azure.

На самом деле, вам просто нужно разрешение на извлечение изображения, и acrpull роли вполне достаточно. Этого можно достичь двумя способами.

Во-первых, просто предоставьте AKS доступ к реестру контейнеров Azure. На моей стороне это проще всего. Просто нужно создать назначение роли для участника-службы, которое использовал AKS. Все этапы см. в разделе Предоставление доступа AKS к ACR.

Другая проблема заключается в том, что они используют секрет Kubernetes. Это немного сложнее, чем первое. Вам необходимо создать новую службу-участника, отличную от той, которую использовал AKS, и предоставить к ней доступ, затем создать секрет kubernetes с помощью службы-участника. Все этапы см. в разделе Доступ с помощью Kubernetes secret.

Ответ №2:

Этот Yaml неверен, можете ли вы предоставить правильный yaml, намерения неверны. Попробуйте приведенный ниже 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
        image: nginx
        resources:
          requests:
            cpu: 100m
            memory: 100Mi
        ports:
        - containerPort: 80
        livenessProbe:
          httpGet:
            path: /
            port: 80
        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