Kubernetes 从一个pod连接到另一个pod
基本上,我有一个部署,它创建了3个自动伸缩的容器:PHP-FPM、NGINX和包含应用程序的容器,所有这些都设置了机密、服务和入口。该应用程序还可以在PHP-FPM和NGINX之间共享该项目,因此一切都已就绪 因为我想用K8s进行更多的探索,所以我决定用Redis创建一个pod,它还可以挂载一个持久磁盘(但这并不重要)。我还为redis创建了一个服务,如果我使用SSH连接到redis容器并运行Kubernetes 从一个pod连接到另一个pod,kubernetes,kubernetes-pod,Kubernetes,Kubernetes Pod,基本上,我有一个部署,它创建了3个自动伸缩的容器:PHP-FPM、NGINX和包含应用程序的容器,所有这些都设置了机密、服务和入口。该应用程序还可以在PHP-FPM和NGINX之间共享该项目,因此一切都已就绪 因为我想用K8s进行更多的探索,所以我决定用Redis创建一个pod,它还可以挂载一个持久磁盘(但这并不重要)。我还为redis创建了一个服务,如果我使用SSH连接到redis容器并运行redis cli,所有这些都可以正常工作 有趣的是,该项目无法连接到Redis所在的pod。我知道PO
redis cli
,所有这些都可以正常工作
有趣的是,该项目无法连接到Redis所在的pod。我知道POD之间的容器共享相同的“本地”网络,可以使用localhost
访问它们
如何将我的项目连接到另一个独立扩展的pod中运行的redis服务器?Redis服务有什么问题
我的Redis服务是:
apiVersion: v1
kind: Service
metadata:
name: redis-service
spec:
ports:
- port: 6379
targetPort: 6379
selector:
app: redis
我的Redis吊舱由一个部署配置文件提供动力(我不一定要扩展它,但我会期待它):
此外,当我点击kubectl get服务时,Redis服务器有一个群集IP:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 21h
nginx-service NodePort 10.100.111.16 <none> 80:30312/TCP 21h
redis-service ClusterIP 10.99.80.141 <none> 6379/TCP 6s
名称类型群集IP外部IP端口
kubernetes ClusterIP 10.96.0.1 443/TCP 21h
nginx服务节点端口10.100.111.16 80:30312/TCP 21h
redis服务群集IP 10.99.80.141 6379/TCP 6s
如何将我的项目连接到另一个独立扩展的pod中运行的redis服务器
这里有三种可能的状态:
- 要从中的连接到Redis pod,请在与Redis pod运行相同的命名空间中运行任何其他pod。在这种情况下,您将使用服务名称
,并指定服务端口redis service
,以通过其当前集群到达它(kube dns正在那里为您进行dns解析)。我猜你是在要求这个场景6379
- 这里只是一个从另一个pod中访问一个pod的示例(在您的案例中)。首次运行:
这将运行新的测试吊舱,并在该吊舱内为您提供kubectl run -it --rm test --image=busybox --restart=Never -- sh
。现在,如果您在那里(测试吊舱内)键入sh
,您将检查DNS在吊舱之间是否正常工作。您还可以尝试使用nslookup redis service
查看redis端口是否实际打开。如果kube dns工作正常,您应该看到端口已打开nc-zv redis service 6379
- 要从中的连接到Redis pod,请选择运行在同一kubernetes集群中但位于不同命名空间中的任何其他pod。在本例中,您将使用由服务名称和命名空间名称组成的FQDN,如中所示
- 从kubernetes集群外部连接到Redis吊舱。在这种情况下,您将需要某种类似机制的入口或节点报告,以便向外界公开redis服务。更多关于这一点,你可以阅读
redis service
。如果我想连接到Postgres,我可以使用pgsql服务
或该服务的任何名称
谢谢大家! 如果您正在使用,请查看他们的
我很难与另一个pod进行通信,另一件事情也没有像预期的那样工作,就是使用服务名称与服务进行通信(DNS查找似乎无法将服务名称转换为IP)
在任何情况下,都有一些相关的步骤,我需要执行,然后一切突然开始工作
还要确保您实际安装了MicroK8s DNS服务:
microk8s.enable dns
有关最新信息,请参阅,但以下是截至今天的步骤:
您现在如何连接到Redis?Redis没有外部IP,因此我无法从外部连接。集群IP是动态分配的,因此这没有用。我现在无法连接,这就是我想做的/要从集群外部连接,您可以将服务类型更改为LoadBalancer或NodePort,或者为服务添加入口。或者使用“kubectl代理”并通过API访问对不起,您能展示一些示例代码吗?你的意思是在我的应用程序中我会写:或者?还是我完全迷路了?谢谢你的回答。我有同样的问题,我可以看到我的redis服务时做的nslookup。然而,然后我尝试使用主机参数“redisservice”从Nodejs连接到Redis,但它不起作用。你知道那是什么吗?再次提前感谢您。
microk8s.enable dns