Пожалуйста, посмотрите на приведенный ниже пример, который показывает, как установить соединение со службой (NodePort
) между двумя частными кластерами GKE:
В этом примере будут использоваться два кластера GKE:
gke-private-cluster-main
- это будет кластер с простым hello-app
gke-private-cluster-europe
- этот кластер сможет связываться с основным кластером
To упростить это все кластеры будут иметь только один узел.
Создание развертывания и службы на gke-private-cluster-main
Ниже приведен простой пример hello-app
и службы, которая будет предоставлять hello-app
для порта 30051
:
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello
spec:
selector:
matchLabels:
app: hello
version: 1.0.0
replicas: 3
template:
metadata:
labels:
app: hello
version: 1.0.0
spec:
containers:
- name: hello
image: "gcr.io/google-samples/hello-app:1.0"
env:
- name: "PORT"
value: "50001"
---
apiVersion: v1
kind: Service
metadata:
name: hello-service
spec:
selector:
app: hello
ports:
- name: hello-port
port: 50001
targetPort: 50001
nodePort: 30051
type: NodePort
Примените его и проверьте внутренний IP-адрес узла, который породил эти модули. Вы можете проверить это с помощью:
GCP -> Compute Engine -> VM Instances
kubectl get nodes -o wide
В моем случае это было 10.156.0.2
Попробуйте получить к нему доступ с gke-private-cluster-europe
Вы можете S SH к узлу gke-private-cluster-europe
и попытаться вызвать команду с узла: curl 10.156.0.2:30051
. Вы должны иметь возможность общаться с этим сервисом и получать вывод, как показано ниже:
Hello, world!
Version: 1.0.0
Hostname: hello-5d79ccdb55-vrrbs
Для проверки возможности подключения изнутри модуля вам потребуется изображение, уже встроенное curl
. Inte rnet - это место для всевозможных удивительных вещей, и на самом деле есть изображение, которое доступно. Вы можете создать стручок с завитком ниже YAML
:
apiVersion: v1
kind: Pod
metadata:
name: curl
namespace: default
spec:
containers:
- image: curlimages/curl
command:
- sleep
- "infinity"
imagePullPolicy: IfNotPresent
name: curl
restartPolicy: Always
После применения выше YAML
, вы можете exe c в капсулу и проверить себя с помощью ниже команды:
$ kubectl exec -it curl -- /bin/sh
$ curl 10.156.0.2:30051
Выход из кластера будет выглядеть следующим образом:
curl: (28) Failed to connect to 10.156.0.2 port 30051: Operation timed out
Это работает для узла, но не работает для модуля.
Разрешить трафик c:
Чтобы разрешить вышеуказанное сетевое подключение, вы будете необходимо:
- Открыть
Google Cloud Platform
- Проверить сетевой тег
gke-private-cluster-main
узла - Go до
Compute Engine
- Найдите узел
gke-private-cluster-main
- Нажмите на него, чтобы получить более подробную информацию
- Скопируйте сетевой тег, который должен выглядеть примерно так:
gke-gke-private-cluster-main-80fe50b2-node
- Проверьте диапазон адресов из
gke-private-cluster-europe
: - Go до
Kubernetes Engine
- Найдите свой
gke-private-cluster-europe
- Нажмите на него, чтобы получить более подробную информацию
- Скопируйте the диапазон адресов модуля, который должен выглядеть примерно так:
10.24.0.0/14
С помощью скопированного сетевого тега и диапазона модуля можно создать правило брандмауэра. Пожалуйста, go до:
VPC Network -> Firewall rules -> Create a firewall rule
![Firewall rule](https://i.stack.imgur.com/7bUGZ.png)
Пожалуйста, обратите внимание на детали, где Используется сетевой тег и диапазон pod, поскольку он будет другим для вас.
Примените его и проверьте еще раз, может ли модуль в gke-private-cluster-europe
иметь доступ к 10.156.0.2:30051
.
Это должно дать вам вывод ниже:
Hello, world!
Version: 1.0.0
Hostname: hello-5d79ccdb55-6s8xh
Пожалуйста, дайте мне знать, если у вас есть какие-либо вопросы по этому поводу.