0

我正在考虑在容器化平台中设置多个聊天机器人,比如 docker 或 Kubernetes,我希望能够通过 Nginx 等反向代理访问这些聊天机器人。任何帮助表示赞赏。

我的示例场景

我有多个聊天机器人,我们称它们为 Bravo、Charlie、Delta

  • Bravo 的 IP 地址和端口是 10.0.0.2:8080
  • 查理的 IP : 10.0.0.3:8080
  • 台达IP:10.0.0.4:8080

所有这些机器人都生活在 nginx 代理后面的容器中。现在,如果我想访问这些聊天机器人,我可以使用 10.0.0.2:8080 访问浏览器并使用聊天机器人,

如果我可以设置一个域 (alpha,org)并希望以 alpha,com/bravo 或 alpha,com/charlie 和 alpha,com/delta 的身份访问这些聊天机器人,我将如何实现这一目标。?

Proxy pass 指令仅适用于 index_html 并且聊天机器人应用程序似乎有某种我无法弄清楚的基本 url 路径。如果我检查流量,nginx 会返回一个空白页。帮我调试一下。

4

1 回答 1

2

您可以使用带有此入口定义的 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

这要求您已经定义并部署了具有关联部署的服务。例如:

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

如果您对此有更多疑问,请不要犹豫。

于 2019-11-27T09:17:02.477 回答