Как создать L7 Internal Ingress с IP из подсети

Итак, у нас есть хост-проект VPC на европе-западе3 и сервисный проект на европе-западе1. Я пытаюсь создать L7 Ingress с несколькими службами nodePort.

Созданный мной кластер использует общую сеть VPC из основного проекта. так что у меня есть 3 подсети в общем VPC

  1. myapp-node-subnets
  2. myapp-pods-подсети
  3. myapp-internal-lb-подсети

Когда пытаюсь создать вход. Интерфейс lb использует один из IP-адресов в myapp-node-subnets, но я хочу, чтобы он использовал myapp-internal-lb-subnets.

------- Развертывание --------

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: myapp-web
  name: myapp-web
  namespace: myapp-dev
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp-web
  template:
    metadata:
      labels:
        app: myapp-web
    spec:
      containers:
          - name: myapp-web-dev
            image: 'docker-registry'
            imagePullPolicy: Always
            ports:
             - containerPort: 8080

-------Услуга--------

apiVersion: v1
kind: Service
metadata:
  labels:
    app: myapp-web-service
  name: myapp-web-service
  namespace: myapp-dev
spec:
  ports:
  - name: myapp-web-service
    port: 8080
    protocol: TCP
    targetPort: 80
  selector:
    app: myapp-web
  type: NodePort
apiVersion: v1
kind: Service
metadata:
  labels:
    app: myapp-api-service-1
  name: myapp-api-service-1
  namespace: myapp-dev
spec:
  ports:
  - name: myapp-api-service-1
    port: 8081
    protocol: TCP
    targetPort: 8080
  selector:
    app: myapp-api-1
  type: NodePort

------- Вход --------

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: myapp-ingress
  namespace: myapp-dev
  annotations:
    kubernetes.io/ingress.regional-static-ip-name: "my-app-static-ip-1"
    kubernetes.io/ingress.class: "gce-internal"
spec:
  rules:
  - http:
      paths:
      - path: /*
        backend:
          serviceName: myapp-web-service
          servicePort: 80
      - path: /api-service/*
        backend:
          serviceName: myapp-api-service-1
          servicePort: 8081

В основном я хочу что-то вроде этого, но с несколькими серверными службами и HTTPS.

apiVersion: v1
kind: Service
metadata:
  labels:
    app: myapp-lb
  name: myapp-lb
  namespace: myapp-dev
  annotations:
    cloud.google.com/load-balancer-type: "Internal"
    networking.gke.io/internal-load-balancer-allow-global-access: "true"
    networking.gke.io/internal-load-balancer-subnet: "myapp-internal-lb-subnets"
spec:
  type: LoadBalancer
  loadBalancerIP: XX.XX.XX.XX(IP I assign)
  ports:
  - name: myapp-lb
    port: 80
    protocol: TCP
    targetPort: 8080
  selector:
    app: myapp-web

person anotherday    schedule 03.11.2020    source источник
comment
Боюсь, в настоящее время это невозможно. Рассматривали ли вы в качестве альтернативы создание внутреннего балансировщика нагрузки в желаемой зоне, который будет указывать на контроллер nginx-ingress в вашем кластере? Вы можете найти в этих двух документах дополнительную справочную информацию gke- ilb, nginx-ingres-internal.   -  person Dawid Kruk    schedule 04.11.2020