Динамическое добавление / удаление именованных хостов из входа k8s - PullRequest
0 голосов
/ 09 мая 2018

Я настраиваю кластер k8s на GKE. Подстановочный знак DNS *.server.com будет указывать на контроллер Ingress. Внутри кластера будут размещаться модули веб-сервера, каждый из которых будет предоставлять уникальный сервис. Контроллер Ingress будет использовать имя сервера для маршрутизации к различным службам.

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

Ответы [ 2 ]

0 голосов
/ 27 июня 2019

Я нашел решение для добавления правила к входу, выполнив следующий патч:

[
  {
    "op": "add",
    "path": "/spec/rules/-",
    "value": {
      "host": "<HOST>",
      "http": {
        "paths": [
          {
            "path": "/*",
            "backend": {
              "serviceName": "<SERVICE_NAME>",
              "servicePort": <PORT>
            }
          }
        ]
      }
    }
  }
]
kubectl patch ingress ${INGRESS_NAME} --type json -p "$(cat patch.json)"

Но я не могу найти решение, чтобы удалить его. Я попробовал следующий патч;

[
  {
    "op": "remove",
    "path": '{.spec.rules[?(@.host=="<HOST>")]}'
  }
]

Но я просто получаю сообщение об ошибке «Недопустимый» из kubectl

Что с ним не так? Я следовал синтаксису jsonPath с https://kubernetes.io/docs/reference/kubectl/jsonpath/

0 голосов
/ 11 мая 2018

Похоже, вы планируете разместить несколько доменных имен на одном балансировщике нагрузки (== один Ingress ресурс).Если нет, этот ответ не применяется.

Вы можете сделать это, настроив Ingress с длинным списком доменных имен, таких как:

spec:
  rules:
  - host: cats.server.com
    http:
      paths:
      - path: /*
        backend:
          serviceName: cats
          servicePort: 8080
  - host: dogs.server.com
    http:
      paths:
      - path: /*
        backend:
          serviceName: dogs
          servicePort: 8080
  - [...]

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

Вы можете создать инструмент для создания этого файла манифеста, а затем применить изменения.Контроллер Ingress достаточно умен, чтобы существующие домены не видели простоев, если они все еще находятся в списке.

Однако домены, которые вы удалили из списка, будут также удалены из карты URL-адреса балансировщика нагрузки иследовательно прекрати принимать трафик.

...