Kubernetes ingress-nginx LoadBalancer указывает на облачную корзину

Я использую nginx-ingress-controller: 0.24.1 (На основе)

Я хотел бы установить запись DNS A для IP-адреса LB, чтобы он подключал ее к общедоступному сегменту облака Google (my-back-end-bucket), который имеет общедоступный index.html в корне И к фоновой части с помощью другого правила URL-адреса.

kind: Service
apiVersion: v1
metadata:
  name: ingress-nginx
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
spec:
  externalTrafficPolicy: Local
  type: LoadBalancer
  selector:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
  ports:
    - name: http
      port: 80
      targetPort: http
    - name: https
      port: 443
      targetPort: https

---

kind: Service
apiVersion: v1
metadata:
  name: google-storage-buckets-service
  namespace: ingress-nginx
spec:
  type: ExternalName
  externalName: storage.googleapis.com

---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: proxy-assets-ingress
  namespace: ingress-nginx
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /my.bucket.com
    nginx.ingress.kubernetes.io/secure-backends: "true"
    nginx.ingress.kubernetes.io/upstream-vhost: "storage.googleapis.com"
spec:
  rules:
    - http:
        paths:
          - path: /*
            backend:
              serviceName: google-storage-buckets-service
              servicePort: 443
          - path: /c/
            backend:
              serviceName: hello-world-service
              servicePort: 8080

Достигнув https://my.ip.add.ress/c - получили оба выхода: < strong> Привет, мир! содержимое корзины.

«Hello, world!» из hello-world-service

"содержимое корзины" из файла bucket 'index.html

Вопрос: как сделать так, чтобы по ip / я получал содержимое корзины, а по ip / c - содержимое ответа серверной части?


person ses    schedule 21.04.2019    source источник
comment
Зачем для этого нужен Kubernetes? Этого можно добиться без Kubernetes: cloud.google.com/storage/docs/hosting- статический сайт   -  person Vasili Angapov    schedule 21.04.2019
comment
потому что: 1. Мне нужна поддержка https, это кажется возможным только с установленным балансировщиком нагрузки 2. Статический контент будет лишь небольшой частью более крупной системы, основанной на правилах URL, он перенаправит часть трафика в корзину, которая будет хранить некоторый статический интерфейс   -  person ses    schedule 21.04.2019
comment
Вы можете использовать Google Cloud Load Balancer для непосредственного обслуживания контента из общедоступной корзины GCS. См. https://cloud.google.com/load-balancing/docs/https/adding-a-backend-bucket-to-content-based-load-balancing.   -  person Brandon Yarbrough    schedule 23.04.2019
comment
Я хотел бы использовать входящий трафик, а НЕ только балансировщик нагрузки. это 2019 год! :)   -  person ses    schedule 25.04.2019


Ответы (1)


Вы можете разделить входящий поток на два, один из которых определяет path: /* с необходимой аннотацией, а другой вход, который определяет path: /c/.

Проблема с вашим единственным входом заключается в том, что его аннотации, которые вы хотите применить к path: /*, применяются только к другим путям.

person hers19    schedule 30.04.2019
comment
исходное сообщение на github - person Mark; 23.05.2019