TL; DR В частном кластере GKE я не могу предоставить службу с внутренним / частным IP.
У нас есть развертывание, состоящее из около 20 микросервисов и 4 монолитов, которые в настоящее время полностью работают на виртуальных машинах в GoogleCloud. Я пытаюсь перенести эту инфраструктуру на GKE. Первым шагом проекта является создание частного кластера GKE (то есть без общедоступного IP-адреса) в качестве замены нашей промежуточной стадии. Поскольку это постановка, мне нужно открыть все конечные точки микросервисов вместе с конечными точками монолита внутри для целей отладки (то есть только для тех, которые подключены к VPC), и именно здесь я застрял. Я пробовал 2 подхода:
- Поместите внутренний балансировщик нагрузки (ILB) перед каждой службой и монолитом. Пример:
apiVersion: v1
kind: Service
metadata:
name: session
annotations:
cloud.google.com/load-balancer-type: "Internal"
labels:
app: session
type: ms
spec:
type: LoadBalancer
selector:
app: session
ports:
- name: grpc
port: 80
targetPort: 80
protocol: TCP
Это работает, хотя и с серьезными ограничениями. ILB создает правило переадресации, а GCP имеет ограничение, равное 75. правило переадресации для каждой сети. Это означает, что мы не можем построить более 3 кластеров в сети. Для нас это неприемлемо.
- а. Я попытался разместить контроллер входящего трафика перед всеми службами, который всегда предоставляет весь кластер с общедоступным IP-адресом - абсолютное запрещение-нет.
apiVersion: extensions/v1beta1
kind: Ingress
hostNetwork: true
metadata:
name: ingress-ms-lb
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: gs03
http:
paths:
- path: /autodelivery/*
backend:
serviceName: autodelivery
servicePort: 80
- path: /session/*
backend:
serviceName: session
servicePort: 80
б. Я попытался использовать входной контроллер nginx, у которого вообще нет IP-адреса.
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-ms-lb
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
# cloud.google.com/load-balancer-type: "Internal"
nginx.ingress.kubernetes.io/ingress.class: nginx
kubernetes.io/ingress.class: "nginx"
# nginx.ingress.kubernetes.io/whitelist-source-range: 10.100.0.0/16, 10.110.0.0/16
spec:
rules:
- host: svclb
http:
paths:
- path: /autodelivery/*
backend:
serviceName: autodelivery
servicePort: 80
- path: /session/*
backend:
serviceName: session
servicePort: 80
Третий вариант - настроить правила брандмауэра, которые отключат любой доступ к общедоступным IP-адресам. Это было отклонено внутри организации из соображений безопасности.
Я застрял на этом этапе и мне нужны подсказки, чтобы двигаться вперед. Пожалуйста помоги