因此,我将后端和前端作为单独的容器放在一个 Kubernetes部署中。
目前,我必须通过不同的端口访问前端和后端。
例如example.com:5000 = frontend
和example.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/