Ботпресс за обратным прокси Nginx

Я думаю о настройке нескольких чат-ботов, как в контейнерной платформе, скажем, докере или Kubernetes, и я хотел бы иметь доступ к этим чат-ботам через обратный прокси-сервер, такой как Nginx. любая помощь приветствуется.

Мой пример сценария

У меня несколько чат-ботов, назовите их Браво, Чарли, Дельта.

  • IP-адрес и порт Bravo: 10.0.0.2:8080
  • IP Чарли: 10.0.0.3:8080
  • IP Delta:10.0.0.4:8080

Все эти боты живут в контейнерах за прокси-сервером nginx. Теперь, если я хочу получить доступ к этим чат-ботам, я могу зайти в браузер с 10.0.0.2:8080 и использовать чат-ботов,

Если бы я мог настроить домен (альфа,org) и хотел бы получить доступ к этим чат-ботам как альфа,com/bravo или альфа,com/charlie и alpha,com/delta, как бы я смог этого добиться?

Директива Proxy pass работает только для index_html, а приложение чат-бота, похоже, имеет какой-то базовый URL-адрес, который я не могу понять. nginx возвращает пустую страницу, если я проверяю трафик. Помогите мне отладить это.

1 ответ

Вы можете использовать контроллер nginx-ingress с этим определением входа: (Но сначала вам нужно развернуть контроллер nginx-ingress в своем кластере, вы можете использовать эту ссылку)

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: alpha-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: alpha.com
    http:
      paths:
      - path: /bravo
        backend:
          serviceName: BravoService
          servicePort: 80
      - path: /charlie
        backend:
          serviceName: CharlieService
          servicePort: 80
      - path: /delta
        backend:
          serviceName: DeltaService
          servicePort: 80 # You could also use named ports if you already named the port in the service like bravo-http-port

Это предполагает, что вы уже определили и развернули свои службы с соответствующими развертываниями. для Ex:

apiVersion: v1
kind: Service
metadata:
  name: BravoService
  labels:
    app: bravo
spec:
  type: NodePort
  selector:
    app: bravo
  ports:
    - name: bravo-http-port
      protocol: TCP
      port: 80
      targetPort: bravo-port
      nodePort: 8080

---

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: bravo-deployment
  labels:
    app: bravo
spec:
  # init with 3 replicas
  replicas: 1
  selector:
    matchLabels:
      app: bravo
  template:
    metadata:
      labels:
        app: bravo
    spec:
      containers:
      - name: bravo-container
        image: my-docker-repo/project:1.0
        ports:
        - name: bravo-port
          containerPort: 8080

Если у вас есть еще вопросы по этому поводу, не стесняйтесь.

Другие вопросы по тегам