Kubernetes стал названием игры, когда дело доходит до оркестровки контейнеров. Это позволяет командам развертывать и масштабировать приложения для удовлетворения изменений спроса, обеспечивая отличный опыт разработчика.
Ключом к обращению с современными динамическими, масштабируемыми рабочими нагрузками в Kubernetes является сетевой стек, который может обеспечить управление API, сервисную сетку и контроллер входа. Конгресс -контроллер Kong Позволяет пользователям управлять правилами маршрутизации, которые управляют внешним доступом пользователя к службе в кластере Kubernetes с той же платформы.
В этой статье будет рассмотрено, как вы можете использовать Конг Для развертывания приложений с полным стеком с Kubernetes. Под полным стеком мы имеем в виду, что Конг может справиться:
- Контейнеры
- Контейнерные сети
- СЕМЕНТА СЕМЕНТА
- Сервисная сеть
- Хост -сеть
- Балансировки нагрузки
- Оценивать ограничение
- Https перенаправления
Давайте начнем с создания нашего кластера.
Установка вида Kubernetes
С добрым вы можете запустить локальные кластеры Kubernetes, используя Docker. Он был разработан для тестирования Kubernetes, но идеально подходит для локальной разработки K8, как мы сделаем в этом примере. Существует довольно много способов установить вид, в зависимости от вашей операционной системы. Если у вас есть Mac, вы можете быстро установить его с Homebrew:
brew install kind
Если вы находитесь на машине Windows и установите шоколад, команда так же проста:
choco install kind
Если вы установили Go и Docker, вы можете запустить следующую команду, чтобы установить вид:
GO111MODULE="on" go get sigs.k8s.io/kind@v0.10.0
Для получения дополнительных параметров установки см. Добрый QuickStart Анкет
После того, как он будет установлен, вам нужно создать кластер::
kind create cluster
После создания кластера вы можете взаимодействовать с ним, используя kubectl. Чтобы перечислить свои кластеры, запустите:
kind get clusters
Он должен вернуть вид, имя контекста кластера по умолчанию.
Теперь запустите следующее, чтобы указать Kubectl в добрый кластер:
kind export kubeconfig
Если вы правильно настроите добрый вид, запуск следующей команды даст вам подробную информацию о вашем кластере:
kubectl cluster-info
Установка контроллера входа в Kong
Теперь, когда у нас работает кластер, мы можем быстро установить Kong, применив манифест непосредственно со следующей командой:
kubectl create -f https://bit.ly/k4k8s
Теперь запустите следующую команду, чтобы получить подробную информацию о Kong-Proxy:
kubectl -n kong get service kong-proxy
Вы заметите, что внешний IP все еще находится на рассмотрении. Kind разоблачает только конечную точку API Kubernetes, и поэтому сервис недоступен вне кластера.
Поскольку мы используем добрый, нам придется запустить порт вперед, чтобы сделать это. Эта команда не демонтизируется, поэтому вам придется открыть еще одно окно консоли, чтобы запустить другие команды.
kubectl -n kong port-forward --address localhost,0.0.0.0 svc/kong-proxy 8080:80
Затем нам нужно установить переменную среды с IP -адресом, откуда мы хотим получить доступ к Kong. Это будет Localhost, так как мы используем порт вперед.
export PROXY_IP=localhost:8080
Вы можете свернуть IP сейчас или посетить в браузере и увидеть:
{"message":"no Route matched with those values"}
Развертывание примера приложения
Теперь давайте развернем что -то, что вернет некоторые результаты. Kubernetes имеет несколько примеров приложений, доступных в GitHub Repo Анкет Мы собираемся развернуть Приложение гостевой книги С этими командами:
kubectl apply -f https://k8s.io/examples/application/guestbook/mongo-deployment.yaml kubectl apply -f https://k8s.io/examples/application/guestbook/mongo-service.yaml kubectl apply -f https://k8s.io/examples/application/guestbook/frontend-deployment.yaml kubectl apply -f https://k8s.io/examples/application/guestbook/frontend-service.yaml
Теперь, если мы запустим Kubectl Get Services, мы увидим две новые услуги:
Мы также можем запросить стручки, чтобы убедиться, что их статус «работает»:
kubectl get pods -l app.kubernetes.io/name=guestbook -l app.kubernetes.io/component=frontend
Чтобы проверить это, вы можете очень быстро запустить еще один порт вперед:
kubectl port-forward svc/frontend 8000:80
Вы найдете гостевую книгу, работающую по адресу http://localhost: 8000/ Анкет Теперь мы настроем контроллер Ingess Ingress.
Разоблачить приложение в Интернет
Теперь мы можем использовать контроллер Incress Ingress, поэтому нам нужно настроить ресурс для обслуживания трафика. Мы можем создать прокси для нашего приложения со следующей командой:
echo ' apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: guestbook annotations: konghq.com/strip-path: "true" kubernetes.io/ingress.class: kong spec: rules: - http: paths: - path: / pathType: Prefix backend: service: name: frontend port: number: 80 ' | kubectl apply -f -
Теперь вы увидите приложение для гостевой книги по адресу http://localhost: 8080/ Анкет
Использование плагинов в качестве сервисов в Конге
С помощью Kong Ingress мы можем выполнить плагины на уровне обслуживания. Таким образом, Конг выполнит плагин всякий раз, когда запрос отправляется на конкретную службу, независимо от того, какой путь входа от того, где он пришел. Если мы хотим добавить ограничения в нашем приложении, мы можем добавить плагин с ограничением скорости в нашу установку Kubernetes со следующей командой:
echo " apiVersion: configuration.konghq.com/v1 kind: KongPlugin metadata: name: rl-by-ip config: minute: 5 limit_by: ip policy: local plugin: rate-limiting " | kubectl apply -f - kongplugin.configuration.konghq.com/rl-by-ip created
После установки плагина вы можете применить аннотацию konghq.com/plugins в нашу гостевую книгу со следующей командой:
kubectl patch svc frontend \ -p '{"metadata":{"annotations":{"konghq.com/plugins": "rl-by-ip\n"}}}'
Если вы свернете приложение Guestbook, вы увидите, что ограничение ставки было установлено.
Если вы планируете часто тестировать гостевую книгу во время этого примера, вы можете установить лимит выше, или вы столкнетесь с ошибкой Kong, которая говорит, что ограничение ставки было превышено.
Настройка перенаправления HTTPS
До сих пор приложение работает на HTTP, и мы хотим, чтобы оно работало на HTTPS. Если мы хотим сказать Kong перенаправить все HTTP -запросы, мы можем обновить его аннотации на HTTPS и выпустить 301 перенаправление с помощью этой команды, чтобы исправить запись Ingress:
kubectl patch ingress guestbook -p '{"metadata":{"annotations":{"konghq.com/protocols":"https","konghq.com/https-redirect-status-code":"301"}}}'
Чтобы проверить это, используя вид, настройте еще один порт с помощью следующей команды:
kubectl -n kong port-forward --address localhost,0.0.0.0 svc/kong-proxy 8443:443
Теперь вы можете получить доступ к «безопасной» версии гостевой книги в https://localhost: 8443 Анкет У него не будет сертификата, поэтому вы столкнетесь с предупреждениями в своем браузере. Давайте посмотрим, как мы можем добавить сертификаты.
Добавление сертификата
Вы можете установить Cert-Manager со следующей командой:
kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.3.1/cert-manager.yaml
Как только изображения стянут, вы можете убедиться, что они работают с этой командой:
kubectl get all -n cert-manager
Вы должны увидеть что -то вроде этого:
Поскольку у нас есть Kubernetes, работающие локально с портом, IP-адрес для прокси Kong составляет 127.0.0.1. Если бы вы не использовали порт вперед, вы могли бы запустить следующую команду, чтобы найти IP -адрес:
kubectl get -o jsonpath="{.status.loadBalancer.ingress[0].ip}" service -n kong kong-proxy
Но так как мы используем порт вперед, эта команда ничего не вернет. Если бы это было в производстве, вы бы установили DNS -записи для разрешения вашего домена на только что извлеченный вами IP -адрес. Как только это будет сделано, вы можете запросить сертификат от Let’s Encrypt, запустив следующее, убедившись изменить электронное письмо:
echo "apiVersion: cert-manager.io/v1alpha2 kind: ClusterIssuer metadata: name: letsencrypt-prod namespace: cert-manager spec: acme: email: user@example.com #change this email privateKeySecretRef: name: letsencrypt-prod server: https://acme-v02.api.letsencrypt.org/directory solvers: - http01: ingress: class: kong" | kubectl apply -f -
Затем вам придется обновить свой ресурс Ingress, чтобы предоставить сертификат следующей командой, изменив домен на свой собственный:
echo ' apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: guestbook-example-com annotations: kubernetes.io/tls-acme: "true" cert-manager.io/cluster-issuer: letsencrypt-prod kubernetes.io/ingress.class: kong spec: tls: - secretName: guestbook-example-com hosts: - demo.example.com #change this domain/subdomain rules: - host: demo.example.com #change this domain/subdomain http: paths: - path: / pathType: Prefix backend: service: name: guestbook port: number: 80 ' | kubectl apply -f -
Как только это будет обновлено, Cert-Manager начнет предоставлять сертификат, и сертификат скоро будет готов.
Отсутствует инструмент в вашем стеке K8S?
Kong может быть недостающим инструментом в вашем стеке Kubernetes. Конгресс -контроллер Kong Может реализовать аутентификацию, https перенаправления, сертификаты безопасности и многое другое во всех ваших кластерах Kubernetes. Используя Kong, вы можете контролировать свои контейнеры, сетевые взаимодействия, балансировку нагрузки, ограничение скорости и многое другое с одной платформы. Это действительно выбор для развертывания вступления в полную треску.
Оригинал: «https://dev.to/mbogan/full-stack-kubernetes-with-kong-ingress-controller-hm3»