Автор: Скотт Коултон, Microsoft Developer Advocate, посол CNCF и капитан Docker
Одним из самых сложных кусочков головоломки, чтобы решить, когда вы новичок в Kubernetes, является вход. Во -первых, у вас есть собственные типы ресурсов Ingress, но вам также необходимо использовать контроллер. Вам доступно много сторонних контроллеров входа, так в чем разница между ними?
Прежде чем идти дальше, это второй пост в серии, и вы предполагаете, что вы прочитали первый пост и имеете некоторое понимание услуг Kubernetes и пространств имен. Если вы не читали пост, вы можете найти его Здесь Анкет Если вам удобно с услугами и пространствами имен, то вы можете продолжить чтение.
Зачем вам вход в Kubernetes? Вы можете просто разоблачить сервис и указать Тип LoadBalancer
Анкет Верно?
Затем это будет говорить с вашим облаком и раскручивает балансировщик нагрузки для вас с общедоступным IP -адресом, и ваш сервис будет доступен для потребления. Счастливые дни!!!
А теперь представьте, что у вас есть 10, или, может быть, 100 услуг, подвергшихся воздействию общественности. Каждая услуга раскрутит свой собственный балансировщик нагрузки и общедоступный IP -адрес. Вы можете увидеть, как это очень быстро растится и станет неуправляемым. Не говоря уже о том, что это будет стоить вам денег от вашего облачного провайдера для дополнительных балансировщиков и IP -адресов.
Введите вход. Что позволяет вам делать Ingress, так это обмениваться одним общедоступным IP -адресом и маршрутируйте ваше приложение через URL -адреса или URI, широко известный как маршрутизация HTTP. После того, как у вас будет выбран контроллер входа, вы сможете указать URL -адреса или URI, которые вам нужно маршрутировать, и контроллер будет присматривать за ним.
При использовании Ingress есть несколько ограничений, о которых вам действительно нужно знать.
Во -первых, ресурсы Ingress не являются именами. Не поймите меня здесь неправильно, сами контроллеры могут быть наняты именами управления RBAC. Определение фактического ресурса Ingress Resource при роде: «Ingress не может иметь RBAC и не имеет имен».
Так что это значит?
Это означает, что если у вас есть несколько команд, использующих кластер, они должны будут опасаться развертывания, связанных с входом, как если бы у них были разрешения на написание своего входа; Они также будут иметь разрешение на изменение или изменение чужого в кластере.
Это подводит меня ко второму ограничению входа; Kubernetes может иметь множество одинаковых типов входа, указывающих на разные ресурсы. Теперь это может быть полезно для вас, но это также может привести к тому, что трафик направляется в Rouge Services на вашем кластере, которые не предназначены для того, чтобы быть частью этого правила входа. Как упоминалось ранее, это то, о чем вы должны знать при использовании Ingress. Позже в посте вы увидите несколько способов убедиться, что каждое правило входа уникально.
На приведенной ниже диаграмме вы можете увидеть поток того, как проходят запросы из Интернета, затем нажмите на контроллер входа, а затем направляются в службу, работающую на вашем кластере.
Теперь, когда у вас есть хорошее понимание потока трафика к вашему сервису, давайте посмотрим, как вы можете определить ресурс Ingress.
Для примеров я собираюсь использовать Nginx Контроллер, который легче всего встать и работать. В следующем разделе вы найдете некоторые другие контроллеры, чтобы дать вам варианты для вашего кластера.
В приведенных ниже примерах вы увидите, что вы сможете определить свои правила проникновения двумя методами: сначала с URI и вторым с заголовками хоста.
Определение входа через URI
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: production-uri annotations: nginx.ingress.kubernetes.io/rewrite-target: / spec: rules: - host: production.com http: paths: - path: /users backend: serviceName: users-api servicePort: 4200 - path: /payments backend: serviceName: payments-api servicePort: 8080
В приведенном выше примере было установлено, что на Production.com есть две услуги: API пользователей и API платежей. Вы можете видеть, что, если трафик пойдет на Production.com/users, он попадет в службу пользователей-API.
Определение входа через заголовок хоста
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: my-production-v-host spec: rules: - host: foo.production.com http: paths: - backend: serviceName: api-v1 servicePort: 80 - host: bar.production.com http: paths: - backend: serviceName: api-v2 servicePort: 80
В этом примере, Это определение маршрутизации через URL -адрес в заголовке хоста, и ваш трафик перейдет в службу, определенную в заголовке хоста.
Выбор контроллера входа будет личным выбором и будет зависеть от вашего варианта использования бизнеса. Вот некоторые, которые имеют разные варианты конфигураций, которые определенно стоит посмотреть.
Nginx — один из самых простых, чтобы встать и работать. Он использует стандартный тип ресурса Kubernetes, поэтому вам нужно будет реализовать что -то вроде Открытый политический агент Если вы хотите заблокировать несколько одинаковых записей правила входа. Из коробки Nginx дает вам поддержку TLS/HTTPS, балансировку нагрузки, TCP/UDP и интерфейсы для Прометея для метрик, которые могут пригодиться.
Contour использует совершенно другой подход к внедрению и использует новый тип входа через CRD (определения ресурсов Kubernetes). Помните ранее в этом посте, было упоминание о том, чтобы иметь множество одинаковых правил проникновения? Контур исправляет это, разрешив только одно правило, а также позволяет делегировать ваши пути URI и части URL. Кроме того, он использует посланник как обратный прокси. Это тот, который стоит вашего исследования.
- Трафик https://traefik.io/
Traefik — еще один популярный выбор для Ingress и поставляется на полной функции. Traefik поставляется с приборной панелью, которая позволяет вам копаться в правилах входа. Существует также интеграция с трассировкой (Jaeger, открытое трассировку и Zipkin), метрики (Prometheus или STATSD) и TLS/HTTPS.
В зависимости от вашего варианта использования бизнеса, вы обязательно должны провести некоторое исследование проектов с открытым исходным кодом для ваших потребностей в входе.
О: Скотт Коултон
Скотт Коултон — адвокат разработчика, посол CNCF и капитан Docker с 10 -летним опытом работы в качестве инженера -программиста в управляемых услугах и пространстве хостинга. Он имеет большой опыт работы в области архитектуры и развертывания распределенных вычислительных систем и сетевых решений для национальных и многонациональных компаний с широким спектром технологий, включая Azure, Kubernetes, Puppet, Docker, Cisco, VMware, Microsoft и Linux. Его сильные стороны дизайна находятся в облачных вычислениях, автоматизации и пространстве безопасности.
Оригинал: «https://dev.to/educative/deploying-my-first-service-on-kubernetes-demystifying-ingress-cj9»