Да, верно, на момент написания этой статьи 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 вашего кластера.