#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