Написать в техподдержку Позвонить нам
Админпанель Выход

Содержание статьи:

    Организация доступа к приложению в Kubernetes

    В общем случае способы доступа к сервисам внутри кластера перечислены в официальной документации. Подробности нашей реализации:

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

    Load Balancer. Наш Kubernetes интегрирован с облачной платформой MCS, так что платформа предоставляет Load Balancer как сервис и может сама создавать балансировщики. Для сравнения, если пользователь настраивает Kubernetes (например, в он премисе), нужно самостоятельно поднимать и настраивать софтверные балансеры. На платформе MCS балансировщики поднимаются сразу в отказоустойчивом режиме active-standby. Когда поднимается основной балансер (на HAProxy), у него всегда есть standby, спящий балансер. Между ними настроен VRRP. Если основной балансер отказывает, весь трафик мгновенно переключается на standby, при этом IP-адрес не меняется.

    В настройке балансировки для Kubernetes помогает наш Cloud Provider. Нужно создать манифест, в котором пользователь указывает тип манифеста «сервис» и тип сервиса «Load Balancer». После деплоя этого манифеста Kubernetes (точнее, Cloud Provider, который работает в Kubernetes) обращается к OpenStack API, создаёт балансировщик и внешний IP-адрес, если это необходимо. Если внешний адрес не нужен, нужно поставить аннотацию, что требуется внутренний балансировщик, и можно пускать трафик на кластер, не открывая публичный IP-адрес на каждой ноде.

    apiVersion: v1
    kind: Service
    metadata:
      name: nginx
      labels:
        k8s-app: nginx-backend
      annotations:
         service.beta.kubernetes.io/openstack-internal-load-balancer: "true"
    spec:
      type: LoadBalancer
      externalTrafficPolicy: Cluster
      selector:
        k8-app: nginx-backend
      ports:
        - port: 80
          name: http
          targetPort: http
        - port: 443
          name: https
          targetPort: httpn

    Не всегда удобно создавать по балансеру на каждый сервис, 10 сервисов — есть 10 балансировщиков, 50 сервисов — 50 балансировщиков. Ими потом также приходится управлять, это тяжелые сущности. Эту проблему решает Ingress.

    Ingress. Чтобы можно было не создавать много балансировщиков, мы добавили поддержку Ingress Controller. Ingress Controller интегрирован с балансировщиком OpenStack. То есть в декларации сервиса конкретного Ingress Controller указан тип Load Balancer. Для кластера создается один балансировщик, по которому Ingress Controller работает и дальше распределяет трафик по сервисам. Ingress Controller балансирует по DNS-именам.

    Подробнее о работе с Ingress в этой статье.

    Полезна ли была эта статья?