Вход в Kubernetes -балансировщик нагрузки nginx, указывающий на облачную корзину

#kubernetes #load-balancing #gcloud #nginx-ingress

#kubernetes #балансировка нагрузки #gcloud #nginx-вход

Вопрос:

Я использую nginx-ingress-controller: 0.24.1 (Вдохновленный)

Я хотел бы установить для записи DNS A IP-адрес LB, чтобы он подключал ее к общедоступной корзине Google Cloud ( 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 — получил оба вывода: Привет, мир! содержимое корзины.

«Привет, мир!» из службы hello-world

«содержимое корзины» из корзины ‘ index.html файл

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

Комментарии:

1. Зачем вам для этого нужен Kubernetes? Это может быть достигнуто без Kubernetes: cloud.google.com/storage/docs/hosting-static-website

2. поскольку: 1. Мне нужна поддержка https, это представляется возможным только при наличии балансировщика нагрузки 2. статический контент будет лишь небольшой частью более крупной системы, основанной на правилах URL, она перенаправит часть трафика в корзину, в которой будет храниться некоторый статический интерфейс

3. Вы можете использовать Google Cloud Load Balancer для прямой отправки содержимого из общедоступной корзины GCS. См. cloud.google.com/load-balancing/docs/https /…

4. Я хотел бы использовать ingress, А не просто балансировщик нагрузки. это 2019 год! 🙂

Ответ №1:

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

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

Комментарии:

1. оригинальное сообщение на github