Эта концепция поначалу немного сложна, чтобы обернуть голову.Входной контроллер Nginx - это не что иное, как сервис типа LoadBalancer
.Что значит быть публичной конечной точкой для ваших услуг.IP-адрес, назначенный этой службе, может направлять трафик нескольким службам.Таким образом, вы можете пойти дальше и определить свои сервисы как ClusterIP
и выставить их через входной контроллер Nginx.
Вот схема, чтобы немного лучше представить концепцию: источник изображения
В этой заметке, если вы приобрели статический IP-адрес для своего сервиса, вам необходимо назначить его на свой входной контроллер Nginx.Так что же такое вход?Ingress - это, по сути, способ сообщить своему входящему контроллеру Nginx, как направлять трафик, поступающий на ваш публичный IP-адрес LB.Итак, как теперь понятно, у вас есть один сервис loadbalancer и несколько входных ресурсов.Каждый вход соответствует одному сервису, который может меняться в зависимости от того, как вы определяете свои сервисы, но вы понимаете, что это такое.
Давайте разберемся с кодом yaml.Как уже упоминалось, вам понадобится служба контроллера входа независимо от того, сколько ресурсов у вас есть.Итак, примените этот код к вашему кластеру EKS.
Теперь давайте посмотрим, как вы можете представить свой модуль миру через Nginx-вход.Скажем, у вас есть wordpress
развертывание.Вы можете определить простую службу ClusterIP
для этого приложения:
apiVersion: v1
kind: Service
metadata:
labels:
app: ${WORDPRESS_APP}
namespace: ${NAMESPACE}
name: ${WORDPRESS_APP}
spec:
type: ClusterIP
ports:
- port: 9000
targetPort: 9000
name: ${WORDPRESS_APP}
- port: 80
targetPort: 80
protocol: TCP
name: http
- port: 443
targetPort: 443
protocol: TCP
name: https
selector:
app: ${WORDPRESS_APP}
Это создаст службу для вашего приложения wordpress
, которая недоступна за пределами кластера.Теперь вы можете создать входной ресурс для предоставления этой услуги:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
namespace: ${NAMESPACE}
name: ${INGRESS_NAME}
annotations:
kubernetes.io/ingress.class: nginx
kubernetes.io/tls-acme: "true"
spec:
tls:
- hosts:
- ${URL}
secretName: ${TLS_SECRET}
rules:
- host: ${URL}
http:
paths:
- path: /
backend:
serviceName: ${WORDPRESS_APP}
servicePort: 80
Теперь, если вы запустите kubectl get svc
, вы увидите следующее:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
wordpress ClusterIP 10.23.XXX.XX <none> 9000/TCP,80/TCP,443/TCP 1m
nginx-ingress-controller LoadBalancer 10.23.XXX.XX XX.XX.XXX.XXX 80:X/TCP,443:X/TCP 1m
Теперь вы можете получить доступ к вашему wordpress
служба через определенный URL-адрес, который сопоставляется общедоступному IP-адресу вашего LB-сервиса входного контроллера.