Мои первые развлеченные собеседования (3 части серии)
В Последняя часть Я ввел в упражнениях и говорил о осложнениях, которые я имел с созданием докеренного дела с хромом внутри на ARM64
Платформа. Также используется Nodejs приложение и его ‘ Dockerfile
был представлен. Эта часть будет больше о Кубернаны Настройка кластера и развертывание приложения NODEJS.
Настройка кластера Kubernetes
После создания Dockerfile
Речь идет о создании кластера Кубернетика. Какую программу я использую для этого, был до меня. В моем Дежол с Кубератусами Конечно, мы используем k3d. Это реализация K3s в доке. В ходе курса я не испытывал никаких проблем с этим решением, поэтому я обязательно использовал K3D для решения заданий. Установка K3D на MacOS легко через Домашний вид с Brew Установить K3D
Отказ Затем кластер может быть создан с K3D Cluster Create --port '8082: 30080 @ Agent [0]' -P 8081: 80 @ loadbalancer --гры 2
Отказ 8081: 80 @ loadbalancer
позволит нашим приложениям быть доступным для нас через localhost: 8081.
.
Развертывание приложения
С бегущим кластером Kubernetes развертывание теперь было в повестке дня. От начала я решил логически отделить приложение от остальной части кластера и создал отдельное пространство имен. Это возможно с Kubectl Создать пространство имен упражнения-NS
в Кубебене. Основная структура для развертывания можно найти в документации Kubernetes ( Развертывание | Kubernetes ). Так что я создал Развертывание.ямль
В моем проявляется
папка со следующим контентом:
apiVersion: apps/v1 kind: Deployment metadata: name: exercise-app namespace: exercise-ns labels: app: exercise-app spec: replicas: 1 selector: matchLabels: app: exercise-app template: metadata: labels: app: exercise-app spec: containers: - name: exercise-app image: niklasmtj/exercise-app:v1
Чтобы сделать обнаружение развертывания, я также создал услугу. Документация Kubernetes для услуг ( Развертывание | Kubernetes ) снова предоставляет основную структуру. Определение услуги можно найти под Манифест/Service.yaml
:
apiVersion: v1 kind: Service metadata: name: exercise-svc namespace: exercise-ns spec: type: ClusterIP selector: app: exercise-app ports: - protocol: TCP port: 80 targetPort: 3000
Здесь важно отметить, что Цельюпорт
Соответствует порту, выставленному контейнером докера.
Проходность
После подготовки развертывания задача теперь была возможность получить доступ к ней. Таким образом, соединение через Вход вошел в игру. По умолчанию K3S использует контроллер входа Traefik для прохождения маршрута, который я также использовал. Конфигурация входа довольно проста. В Ingress.yaml
Файл я использовал следующую конфигурацию:
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: exercise-ingress namespace: exercise-ns spec: rules: - http: paths: - path: / backend: serviceName: exercise-svc servicePort: 80
Таким образом /
Путь напрямую направляется в упражнение
Сервис, который мы определены в Service.yaml
на порту 80.
IP-Whitelisting
Другая задача, которую я должен был решить с проникновением, заключался в том, чтобы ограничить диапазон IP, который вообще принят. К сожалению, из-за моих предыдущих знаний у меня не было возможности реализовать все это в то время. Тем не менее я читаю, как я бы реализую это и задокументировал его в моем Readme. В ходе задачи я посмотрел на контроллер входа NGINX, потому что я нашел больше всего результатов по этому поводу во время моих исследований. Там, кажется, работает простая аннотация в Ingress.yaml
:
metadata: annotations: ingress.kubernetes.io/whitelist-source-range: "192.168.0.0/16"
Это убедится, что только IPS из 192.168.0.0.0/16
Сеть может подключаться к приложениям. Так что каждый IP, начиная с 192.168.0.1
к 196.168.255.254
имеют право подключаться. NGINX упадет на все запросы, не исходя из этого диапазона IP.
Кроме того, попытки с Traefik в качестве контроллера входа, который используется K3S по умолчанию, не удалось. Это район, который мне нужно посмотреть более подробно в ближайшем будущем, чтобы точно понять, насколько входятся, и на каком уровне вы можете заблокировать IPS. Кроме того, мне нужно посмотреть, имеет ли это значение того, что мой кластер K3S работает внутри докера и как это влияет на входящие IPS.
Спасибо за чтение, Никлас
Код из этого поста также можно найти на GitHub: Niklasmtj/Kubernetes-упражнение . Кроме того, я создал ARM64
а также AMD64
Docker Image для Niklasmtj/Упражнение-приложение: v1
Отказ Таким образом, примерное приложение должно быть использовано на других устройствах.
Серия:
- Часть 1.
- Часть 2
- Часть 3 — Пришли 29 апреля
Мои первые развлеченные собеседования (3 части серии)
Оригинал: «https://dev.to/niklasmtj/my-first-devops-job-interview-part-2-of-3-3i0m»