我正在尝试在具有2个节点的Kubernetes集群中部署我的示例微服务Docker镜像。我探讨了有关Pods,Services,Deployment,StatefulSets和Daemon-sets等的所有内容。
我正在尝试为此创建示例部署和服务。在这里,我探讨了部署如何提供可伸缩性和负载平衡功能。并通过提供Services ClusterIp来探索服务发现。
我有两个问题:
我的情况是我正在尝试在我的内部部署Ubuntu机器上部署微服务。本机的IP地址为192.168.1.15。当我指的是Kubernetes时,服务也会有一个clusterIP。
如果我的微服务终点是 FragmentTransaction fragmentTransaction = getSupportFragmentManager()
.beginTransaction();
Fragment profileFragment = new InfoFragment();//the fragment you want to show
profileFragment.setArguments(bundle);
fragmentTransaction
.replace(R.id.content_frame, profileFragment);//R.id.content_frame is the layout you want to replace
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
,我怎么称呼这个终点?我是否还需要使用clusterIP?我可以简单地拨打192.168.1.15:8080/api/v1/loadCustomers吗?
当我调用终点时,clusterIP的作用是什么?我可以直接使用端口吗?
我指的是以下探索链接:
https://kubernetes.io/docs/concepts/services-networking/connect-applications-service/
答案 0 :(得分:1)
<强> tldr:强>
您无法使用群集外部的 clusterIP 访问该应用程序。您可以使用loadbalancer的IP(type=LoadBalaner
)或Node的IP(type=NodePort
)来访问应用程序。
clusterIP的好处: 如您所知,pod可以在其生命周期中创建和终止,从而创建和终止IP(端点IP)地址。因此,clusterIP是静态的,不依赖于pod的生命周期。
长答案
在Kubernetes群集中 应用程序或pod具有以下抽象。
端点IP和端口:由法兰绒,印花布等CNI插件提供。
您可以通过以下命令列出并观察端点。
kubectl get endpoints --all-namespaces
clusterIP和端口:它由 kube-proxy 组件提供。
复制的pod共享一个clusterIP和端口。
将请求负载平衡到复制的pod。
您可以使用以下命令列出并观看clusterIP和端口
kubectl get services --all-namespaces
externalIP和端口:它可以是3-4层负载均衡器的IP和端口或节点的IP和Nodeport。
如果您想使用loadbalancer的IP和端口,可以在服务文件中使用type=LoadBalaner
。
如果要使用节点的IP,则需要在服务文件中使用type=NodePort
。