Как получить HTTPS на AKS без доступа - PullRequest
0 голосов
/ 26 октября 2018

Моя проблема проста. У меня есть развертывание AKS со службой LoadBalancer, которому необходимо использовать HTTPS с сертификатом.

Как мне это сделать?

Все, что я вижу онлайн, включает в себя Ingress и nginx-ingress, в частности.

Но мое развертывание - это не веб-сайт, это служба Dropwizard с REST API на одном порту и служба администратора на другом порту. Я не хочу отображать порты на путь к порту 80, я хочу сохранить порты как есть. Почему HTTPS привязан к входу?

Я просто хочу HTTPS с сертификатом и больше ничего не менять, есть ли простое решение для этого?

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

Контейнер-коляска с nginx с правильными сертификатами (возможно, загруженными из секрета или из ConfigMap) будет выполнять эту работу без доступа. Этот представляется хорошим примером использования контейнера nginx-ssl-proxy .

0 голосов
/ 26 октября 2018

Да, верно, на момент написания этой статьи Ingress будет в настоящее время работать либо на порту 80, либо на порту 443, потенциально он может быть расширен для использования любого порта, потому что nginx , Traefik , haproxy и т. Д. Могут прослушивать разные порты.

Таким образом, вы можете воспользоваться услугами типа LoadBalancer или NodePort. Тип LoadBalancer не будет работать напрямую с TLS, поскольку балансировщики нагрузки Azure имеют уровень layer 4 . Поэтому вам придется использовать Application Gateway , и для обеспечения безопасности предпочтительнее использовать внутренний балансировщик нагрузки .

Поскольку вы используете Azure, вы можете запустить что-то вроде этого (при условии, что ваш кластер K8s настроен правильно для использования облачного провайдера Azure, либо опция --cloud-provider, либо менеджер облачного контроллера):

$ cat <<EOF
apiVersion: v1
kind: Service
metadata:
  name: your-app
  annotations:
    service.beta.kubernetes.io/azure-load-balancer-internal: "true"
spec:
  type: LoadBalancer
  ports:
  - port: <your-port>
  selector:
    app: your-app
EOF | kubectl apply -f -

, и это создаст балансировщик нагрузки Azure на порту, который вам нравится для вашей службы. За кулисами балансировщик нагрузки будет указывать на порт на узлах, а внутри узлов будут правила брандмауэра, которые будут направлять ваш контейнер. Затем вы можете настроить Шлюз приложений . Вот хорошая статья, описывающая его, но используя порт 80, вам придется изменить его, используя порт 443 и настройку сертификатов TLS, а шлюз приложений также поддерживает сквозной TLS на случай, если Вы также хотите прекратить TLS прямо в своем приложении.

Другой вариант - NodePort, и вы можете запустить что-то вроде этого:

$ kubectl expose deployment <deployment-name> --type=NodePort

Затем Kubernetes выберет случайный порт на всех ваших узлах, где вы можете отправлять трафик на вашу службу, прослушивая <your-port>. Таким образом, в этом случае вам придется вручную создать балансировщик нагрузки с TLS или источником трафика, который прослушивает TLS <your-port> и перенаправляет его на NodePort на всех ваших узлах, этот балансировщик нагрузки может быть любым, например, haproxy, nginx, Трафик или что-то еще, что поддерживает прекращение TLS. Также вы можете использовать Application Gateway для прямой пересылки на порты вашего узла, другими словами, определить прослушиватель, который прослушивает NodePort вашего кластера.

...