TL; DR В частном кластере GKE я не могу предоставить службу с внутренним / частным IP-адресом.
У нас есть развертывание, состоящее из около 20 микросервисов и 4 монолитов, которые в настоящее время полностью работают на виртуальных машинах в GoogleCloud. Я пытаюсь перенести эту инфраструктуру в GKE. Первым шагом проекта является создание частного кластера GKE (т.е. без каких-либо общедоступных c IP) в качестве замены нашего этапа. Поскольку это стадия, мне нужно выставить все конечные точки микросервиса вместе с конечными точками монолита внутри для целей отладки (значит, только для тех, которые подключены к VP C), и именно здесь я застрял. Я попробовал 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 кластеров в сети. Неприемлемо для нас.
а. Я попытался разместить входной контроллер перед всеми службами, который всегда выставляет весь кластер с общедоступным c 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
b. Я попытался использовать входной контроллер 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
Третий вариант - настроить правила брандмауэра, которые отключат любой доступ к публичным c IP-адресам. , Это было отклонено внутри страны, учитывая проблемы с безопасностью.
Я застрял на этом этапе и мне нужно несколько указателей, чтобы двигаться вперед. Пожалуйста, помогите