因此,我将后端和前端作为单独的容器放在一个 Kubernetes部署中。

目前,我必须通过不同的端口访问前端和后端。

例如example.com:5000 = frontendexample.com:7000 = backend
我想知道如何设置前端容器以在www.example.com上运行以及后端容器在api.example.com上运行

我正在使用gcp(谷歌云),已经正确设置了我的dns,并且不得不使用我为它们分配的端口(5000 = frontend,7000 = backend)访问服务(Web应用程序)。

我正在考虑一个可能的手动解决方案,但想知道 Kubernetes 是否内置了某些内容。该解决方案将是:

我将在Kubernetes集群中设置一个nginx容器,该容器将在端口80上运行,因此通过的任何请求都将重定向到适当的端口:

例如,我可以将api.example.com point to <my_cluster_ip>/backend和前端<my_cluster_ip>/frontend设置为相同,然后让nginx将/ backend指向端口5000 ,将/ frontend指向端口7000

我希望我可以使用kubernetes中内置的某些东西吗?这是我目前的部署配置:

{
  "apiVersion": "extensions/v1beta1",
  "kind": "Deployment",
  "metadata": {
    "name": "my_container"
  },
  "spec": {
    "replicas": 1,
    "template": {
      "metadata": {
        "labels": {
          "app": "my_app"
        }
      },
      "spec": {
        "containers": [
          {
            "name": "backend",
            "image": "backend_url",
            "ports": [
              {
                "containerPort": 7000
              }
            ],
            "imagePullPolicy": "Always",
            "env": [
              {
                "name": "NODE_PORT",
                "value": "7000"
              },
              {
                "name": "NODE_ENV",
                "value": "production"
              }
            ]
          },
          {
            "name": "frontend",
            "image": "frontend_url",
            "ports": [
              {
                "containerPort": 5000
              }
            ],
            "imagePullPolicy": "Always",
            "env": [
              {
                "name": "PORT",
                "value": "5000"
              },
              {
                "name": "NODE_ENV",
                "value": "production"
              }
            ]
          }
        ]
      }
    }
  }
}

最佳答案

好吧,对于初学者来说,您不应该基于Deployment公开服务。为此,您应该使用服务来覆盖您的部署。为此,请阅读http://kubernetes.io/docs/user-guide/services/

当您听完讲座时,您可能会注意到,完全有可能设置两个服务,这些服务匹配相同的支持Pod(端点),但位于不同的端口(即front:80-> 5000 api:80-> 7000)。问题是,它仍然只在k8s集群内部公开您的工作。要在外部发布它,您可以使用NodePort或LoadBalancer类型的Service(第一个缺点是使用高端口向公众公开您的服务,第二个缺点是每个服务都有单独的LB(因此IP))。

我个人更喜欢公开展示服务的方法是使用Ingress / IngressController http://kubernetes.io/docs/user-guide/ingress/

最后,当您将解决方案与两个服务(front / api)分开时,您会发现没有真正的理由将它们放在一个部署/ pod中。如果将它们分为两个不同的部署,则将获得更灵活的体系结构,并对解决方案进行更精细的控制。

关于nginx - 如何设置2个不同的容器以在Kubernetes中的2个不同的DNS名称上运行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40603789/

10-16 08:30