Ama*_*amp 174 containers kubernetes kubernetes-service
1 - 我正在阅读文档,我对措辞有点困惑.它说:
ClusterIP:在集群内部IP上公开服务.选择此值使服务只能从群集中访问.这是默认的ServiceType
NodePort:在静态端口(NodePort)上的每个Node的IP上公开服务.将自动创建NodePort服务将路由到的ClusterIP服务.您可以通过请求从群集外部联系NodePort服务
<NodeIP>:<NodePort>
.LoadBalancer:使用云提供商的负载均衡器在外部公开服务.将自动创建外部负载均衡器将路由到的NodePort和ClusterIP服务.
NodePort服务类型是否仍然使用ClusterIP
但只是在一个不同的端口,该端口对外部客户端开放?所以在这种情况下是<NodeIP>:<NodePort>
一样的<ClusterIP>:<NodePort>
吗?
或者NodeIP
实际上是运行时找到的IP kubectl get nodes
而不是用于ClusterIP服务类型的虚拟IP?
2 - 同样在以下链接的图表中:
http://kubernetes.io/images/docs/services-iptables-overview.svg
有什么特别的原因Client
是里面的Node
?我认为Cluster
在ClusterIP服务类型的情况下它需要在a里面.
如果为NodePort绘制了相同的图表,那么将客户端完全绘制在两者之外是否有效Node
,Cluster
或者我是否完全忽略了这一点?
kel*_*ket 152
ClusterIP公开以下内容:
spec.clusterIp:spec.ports[*].port
您只能在群集内访问此服务.可从spec.clusterIp
港口进入.如果spec.ports[*].targetPort
设置了a ,它将从端口路由到targetPort.调用时获得的CLUSTER-IP kubectl get services
是内部在集群内分配给此服务的IP.
NodePort公开以下内容:
<NodeIP>:spec.ports[*].nodePort
spec.clusterIp:spec.ports[*].port
如果您从节点的外部IP在nodePort上访问此服务,它将把请求spec.clusterIp:spec.ports[*].port
路由到spec.ports[*].targetPort
,如果设置,它将把它路由到您的.也可以使用与ClusterIP相同的方式访问此服务.
您的NodeIP是节点的外部IP地址.您无法访问您的服务<ClusterIP>:spec.ports[*].nodePort
.
LoadBalancer公开以下内容:
spec.loadBalancerIp:spec.ports[*].port
<NodeIP>:spec.ports[*].nodePort
spec.clusterIp:spec.ports[*].port
您可以从负载均衡器的IP地址访问此服务,该IP地址将您的请求路由到nodePort,nodePort又将请求路由到clusterIP端口.您可以像访问NodePort或ClusterIP服务一样访问此服务.
Tom*_*vid 73
澄清任何正在寻找更简单级别3之间差异的人.您可以使用最小的ClusterIp(在k8s clusteR内)或使用NodePort(在k8s群集外部的群集内)或LoadBalancer(外部世界或您在LB中定义的任何内容)的更大曝光来公开您的服务.
ClusterIp exposure < NodePort exposure < LoadBalancer exposure
ClusterIp -> Expose service through **k8s cluster** with ip/name:port
NodePort -> Expose service through **Internal network VM's** also external to k8s ip/name:port
LoadBalancer -> Expose service through **External world** or whatever you defined in your LB.
Run Code Online (Sandbox Code Playgroud)
neo*_*yle 37
ClusterIP:服务是通过在集群豆荚/服务可达
如果我做了一个名为为MyService型的默认命名空间的服务:ClusterIP那么对于服务的以下预测的静态DNS地址将被创建:
myservice.default.svc.cluster.local(或者只是myservice.default,或默认命名空间中的pod只有"myservice"才能工作)
并且该DNS名称只能由群集内的pod和服务解析.
NodePort:可以ping通K8s主机节点(以及群集中的pod /服务)的同一LAN /客户端上的客户端可以访问服务(请注意,为了安全起见,您的k8s主机节点应位于私有子网上,因此Internet上的客户端赢了无法访问此服务)
如果我在3节点Kubernetes群集上的类型为:NodePort的mynamespace命名空间中创建名为mynodeportservice的服务.然后将创建类型为ServiceIP的服务,并且群集内的客户端可以通过以下可预测的静态DNS地址访问它:
mynodeportservice.mynamespace.svc.cluster.local(或者只是mynodeportservice.mynamespace)
对于mynodeportservice在30000 - 32767范围内的nodeport上侦听的每个端口,将随机选择.这样,群集外部的外部客户端可以访问群集中存在的ClusterIP服务.假设我们的3 K8主机节点具有IP 10.10.10.1,10.10.10.2,10.10.10.3,Kubernetes服务正在侦听端口80,并且随机选择的Nodeport是31852.
存在于集群外部的客户端可以访问10.10.10.1:31852,10.10.10.2:31852或10.10.10.3:31852(由每个Kubernetes主机节点监听NodePort)Kubeproxy将请求转发到mynodeportservice的端口80.
LoadBalancer:连接到互联网的每个人都可以访问服务*(通用架构是L4 LB可以在互联网上公开访问,方法是将其置于DMZ中,或者将私有和公共IP以及k8s主机节点放在私有子网上)
(注意:这是唯一不能在100%Kubernetes实现中使用的服务类型,如裸机Kubernetes,当Kubernetes具有云提供程序集成时,它可以工作.)
如果您创建mylbservice,则会生成L4 LB VM(a群集IP服务,以及NodePort服务也将被隐式生成).这一次我们的NodePort是30222.的想法是,L4 LB将有1.2.3.4公网IP,它会负载均衡和流量转发到具有私有IP地址的3个K8S主机节点.(10.10.10.1-30222,10.10.10.2-30222,10.10.10.3:30222)然后Kube Proxy将它转发到集群内存在的ClusterIP类型的服务.
您还问:NodePort服务类型是否仍使用ClusterIP?是*
或者运行kubectl get节点时NodeIP实际上是IP吗?也是*
让我们在基础之间绘制一个平行线:
一个容器在一个吊舱内.一个pod位于replicaset中.复制集在部署中.
同样:
ClusterIP服务是NodePort服务的一部分.NodePort服务是负载均衡器服务的一部分.
在您显示的图表中,客户端将是群集内的一个pod.
Teo*_*ahi 30
让我们假设您在本地计算机上创建了一个Ubuntu VM.它的IP地址是192.168.1.104.
您登录到VM,并安装了Kubernetes.然后你创建了一个在其上运行nginx图像的pod.
1-如果要在VM中访问此nginx pod,您将创建绑定到该Pod 的ClusterIP,例如:
$ kubectl expose deployment nginxapp --name=nginxclusterip --port=80 --target-port=8080
Run Code Online (Sandbox Code Playgroud)
然后在您的浏览器上,您可以使用端口80键入nginxclusterip的IP地址,如:
2-如果要从主机访问此nginx pod,则需要使用NodePort公开部署.例如:
$ kubectl expose deployment nginxapp --name=nginxnodeport --port=80 --target-port=8080 --type=NodePort
Run Code Online (Sandbox Code Playgroud)
现在您可以从主机上访问nginx,例如:
在我的仪表板中,它们显示为:
下面是一个显示基本关系的图表.
zan*_*ngw 28
概括:
\nNodePort类型是ClusterIP类型的扩展。因此 NodePort 类型的服务有一个集群 IP 地址。
\nLoadBalancer类型是NodePort类型的扩展。因此,LoadBalancer 类型的服务具有一个集群 IP 地址和一个或多个 nodePort 值。
\n集群IP
\n节点端口
\n负载均衡器
\n外部名称
\nspec.externalName
。\n它通过返回 CNAME 记录及其值,将服务映射到 externalName 字段的内容(例如 foo.bar.example.com)。dah*_*boy 19
我创建了 2 个服务,其中 1 个用于NodePort,另一个用于ClusterIP
\n\n如果我想访问集群内的服务(从主节点或任何工作节点),则两者都可以访问。
\n\n现在,如果我想从集群外部访问服务,则只能访问Nodeport而不能访问ClusterIP。
\n\n在这里你可以看到 localhost 不会监听端口 80,即使我的 nginx 容器正在监听端口 80。
\n是的,这是唯一的区别。
\n假设您必须在集群中创建以下架构。我想这很常见。
\n\n现在,用户仅在某个端口上与前端通信。后端和数据库服务始终对外部世界隐藏。
\n小智 14
nodeA : pod1 => clusterIP1, pod2 => clusterIP2
nodeB : pod3 => clusterIP3.
Run Code Online (Sandbox Code Playgroud)
pod3 可以通过其 clusterIP 网络与 pod1 通信。
nodeA => nodeIPA : nodeportX
nodeB => nodeIPB : nodeportX
Run Code Online (Sandbox Code Playgroud)
您可以通过 nodeIPA:nodeportX 或 nodeIPB:nodeportX 访问 pod1 上的服务。无论哪种方式都可以工作,因为 kube-proxy(安装在每个节点中)将接收您的请求并使用 clusterIP 网络跨节点分发它[重定向它(iptables term)]。
基本上只是将 LB 放在前面,以便将入站流量分配到 nodeIPA:nodeportX 和 nodeIPB:nodeportX,然后继续上面的流程编号 2。
Feature |
ClusterIP |
NodePort |
LoadBalancer |
---|---|---|---|
博览会 | 在集群中的内部 IP 上公开服务。 | 向外部客户公开服务 | 向外部客户公开服务 |
簇 | 这种类型使服务只能从集群内访问 | NodePort 服务,每个集群节点在节点本身上打开一个端口(因此得名)并将在该端口上接收到的流量重定向到底层服务。 | 可通过专用负载均衡器访问的 LoadBalancer 服务,从 Kubernetes 运行的云基础架构提供 |
无障碍 | 它是默认服务,内部客户端将请求发送到稳定的内部 IP 地址。 | 该服务不仅可以通过内部集群 IP 和端口访问,还可以通过所有节点上的专用端口访问。 | 客户端通过负载均衡器的 IP 连接到服务。 |
Yaml 配置 | type: ClusterIP |
type: NodePort |
type: LoadBalancer |
端口范围 | 任何公共 ip 形式的集群 | 30000 - 32767 | 任何公共 ip 形式的集群 |
Ref - My blog post Difference between ClusterIP, NodePort and LoadBalancer Service
ClusterIP - In Kubernetes, Clusterip services help applications within the cluster communicate with each other.
NodePort -
NodePort services in Kubernetes are a way to expose your application to the outside world or make it accessible from outside the cluster.
LoadBalancer - LoadBalancer services provide a public IP address and port that act as an entry point for external traffic.
The difference between the three service types can be stated as below
归档时间: |
|
查看次数: |
69429 次 |
最近记录: |