Понимание подсетей в кластере Kubernetes

При использовании GKE я обнаружил, что все узлы в кластере Kubernetes должны находиться в одной сети и в одной подсети. Итак, я хотел понять, как правильно проектировать сети.

У меня есть две услуги A а также B и они не имеют никакого отношения между ними. Мой план состоял в том, чтобы использовать один кластер в одном регионе и иметь два узла для каждого из сервисов. A а также B в разных подсетях в одной сети.

Тем не менее, кажется, что это не может быть сделано. Другой способ разделить кластер использует namespacesОднако я уже использую среду разработки с разделами, используя пространства имен.

Я читал о федерации кластеров https://kubernetes.io/docs/concepts/cluster-administration/federation/, однако, мои сервисы небольшие, и они мне не нужны в нескольких кластерах и в синхронизации.

Как правильно настроить netowrking для этих сервисов? Должен ли я просто использовать одну и ту же сеть и подсеть для всех 4 узлов для обслуживания двух служб A а также B?

1 ответ

Вы можете ограничить входящий (или исходящий) трафик, используя метки и сетевые политики.

Таким образом, модули могли бы принимать трафик только в том случае, если он был сгенерирован модулем, принадлежащим тому же приложению, или с использованием любой логики, которую вы хотите реализовать.

Вы можете выполнить этот шаг к пошаговому руководству, которое проведет вас по реализации POC.

kubectl run hello-web --labels app=hello \
  --image=gcr.io/google-samples/hello-app:1.0 --port 8080 --expose

Пример сетевой политики

kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: hello-allow-from-foo
spec:
  policyTypes:
  - Ingress
  podSelector:
    matchLabels:
      app: hello
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: foo