Azure kubernetes служба loadbalancer внешний IP не доступен - PullRequest
0 голосов
/ 22 декабря 2019

Я новичок в мире Kubernetes и тестировал пример развертывания приложения Django "Hello world". Используя docker-compose, я смог получить доступ к странице адского мира в браузере, но мне нужно использовать Kubernetes. Итак, я протестировал два варианта, и ни один из них не сработал. 1) Я создал конвейер Azure CICD для построения и отправки изображения в ACR с помощью следующего файла Dockerfile,

FROM python:3.8
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
RUN mkdir /hello_world
WORKDIR /hello_world
COPY . /hello_world/
RUN pip install -r requirements.txt
CMD [ "python", "manage.py", "runserver", "0.0.0.0:8000" ]

. Конвейер успешно завершается и загружает изображение в репозиторий.

Теперь яиспользуйте kubectl для развертывания с использованием файла развертывания,

apiVersion: apps/v1
kind: Deployment
metadata:
  name: django-helloworld
spec:
  replicas: 3
  selector:
    matchLabels:
      app: django-helloworld
  template:
    metadata:
      labels:
        app: django-helloworld
    spec:
      containers:
      - name: django-helloworld
        image: acrshgpdev1.azurecr.io/django-helloworld:194
        #imagePullPolicy: Always
        ports:
        - containerPort: 8000

---

apiVersion: v1
kind: Service
metadata:
  name: django-helloworld-service
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: django-helloworld

Развертывание и служба создаются, но когда я пытаюсь получить доступ к внешнему IP-адресу службы LB через браузер, страница недоступна. Я использовал внешний порт ip: и он не работал. Любые мысли, почему это могло бы произойти?

2) Я использовал тот же Dockerfile, но другой файл развертывания (изменил образ на локально созданный образ и удалил LB-сервис), чтобы развернуть приложение в моем локальном Kubernetes. файл развертывания был следующим:

apiVersion: v1
kind: Service
metadata:
  name: django-helloworld-service
spec:
  selector:
    app: django-helloworld
  ports:
  - protocol: TCP
    port: 80
    targetPort: 30800
  type: NodePort

---

apiVersion: apps/v1
kind: Deployment
metadata:
  name: django-helloworld
spec:
  replicas: 3
  selector:
    matchLabels:
      app: django-helloworld
  template:
    metadata:
      labels:
        app: django-helloworld
    spec:
      containers:
      - name: django-helloworld
        image: django-helloworld:1.0
        #imagePullPolicy: Always
        ports:
        - containerPort: 8000

Он создает развертывание и службу, но не назначает внешний IP-адрес службе NodePort, поэтому я не могу определить, какую службу выбрать для тестированияПриложение успешно. Я знаю, что не могу выбрать LB, поскольку он не работает локально, и мне нужно развернуть его с помощью облачной службы.

1 Ответ

2 голосов
/ 22 декабря 2019

просто настройте свой сервис на тип LoadBalancer и выполните правильное сопоставление портов:

apiVersion: v1
kind: Service
metadata:
  name: django-helloworld-service
spec:
  type: LoadBalancer
  ports:
  - port: 80
    targetPort: 8000
  selector:
    app: django-helloworld

https://kubernetes.io/docs/concepts/services-networking/service/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...