Рубрики
Uncategorized

Полный стек Kubernetes с контроллером Ingess Ingress

Kubernetes стал названием игры, когда дело доходит до оркестровки контейнеров. Это позволяет командам … с меткой Kubernetes, DevOps, Docker.

Kubernetes стал названием игры, когда дело доходит до оркестровки контейнеров. Это позволяет командам развертывать и масштабировать приложения для удовлетворения изменений спроса, обеспечивая отличный опыт разработчика.

Ключом к обращению с современными динамическими, масштабируемыми рабочими нагрузками в Kubernetes является сетевой стек, который может обеспечить управление API, сервисную сетку и контроллер входа. Конгресс -контроллер Kong Позволяет пользователям управлять правилами маршрутизации, которые управляют внешним доступом пользователя к службе в кластере Kubernetes с той же платформы.

В этой статье будет рассмотрено, как вы можете использовать Конг Для развертывания приложений с полным стеком с Kubernetes. Под полным стеком мы имеем в виду, что Конг может справиться:

Давайте начнем с создания нашего кластера.

Установка вида 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»