因此,我在一个Kubernetes 部署中将后端和前端作为单独的容器。
目前我必须通过不同的端口访问前端和后端。
例如example.com:5000 = frontend
& example.com:7000 = backend
我想知道如何设置我的前端容器在 www.example.com
上运行& 我的后端容器在 api.example.com
上运行
我正在使用 gcp(谷歌云),已正确设置我的 dns,并且必须使用我分配给每个服务(网络应用程序)的端口(5000=前端,7000=后端)访问服务(网络应用程序)。
我正在考虑一种可能的手动解决方案,但我想知道 Kubernetes 中是否内置了某些功能。这个解决方案是:
我会在 Kubernetes 集群中设置一个在端口 80 上运行的 nginx 容器,因此通过的任何请求都会被重定向到适当的端口:
例如我可以有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"
}
]
}
]
}
}
}
}
最佳答案
好吧,对于初学者来说,您不应该基于部署来公开您的服务。为此,您应该使用服务覆盖您的部署。阅读http://kubernetes.io/docs/user-guide/services/为此。
当您完成讲座时,您可能会注意到,完全可以设置两个与相同后端 Pod(端点)匹配但在不同端口上的服务(即 front:80->5000 api:80->7000 )。问题是,它仍然只在 k8s 集群内部暴露你的工作。要向外部发布它,您可以使用 NodePort 或 LoadBalancer 类型的服务(第一个的缺点是使用高端口将您的服务公开给公众,第二个将是每个服务一个单独的 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/