首页 > 编程语言 >NodeIP、PodIP、ClusterIP、NodePort、Port、TargetPort、HostPort

NodeIP、PodIP、ClusterIP、NodePort、Port、TargetPort、HostPort

时间:2023-04-04 11:37:40浏览次数:62  
标签:TargetPort service Service IP 端口 访问 PodIP NodePort Pod

目录

 

1、IP 类型

Kubernetes 集群里有三种IP地址,分别如下:

名称说明
Node IP Worker 节点的IP地址,即物理网卡的 IP 地址。
Pod IP Pod的IP地址,即 Containerd 容器的IP 地址,此为虚拟 IP 地址。
Cluster IP Service 的 IP 地址,此为虚拟 IP 地址。

1.1、Node IP

  • 可以是物理机的IP(也可能是虚拟机IP)。

    • 每个Service都会在Node节点上开通一个端口,外部可以通过NodeIP:NodePort即可访问Service里的Pod,和我们访问服务器部署的项目一样,IP:端口/项目名
  • 在kubernetes查询Node IP

    kubectl get nodes -o wide

    显示出来的InternalIP就是NodeIP

1.2、Pod IP

  • Pod IP 是每个 Pod 的 IP 地址,他是 ContainerdEngine 根据网桥的IP地址段进行分配的,通常是一个虚拟的二层网络

    • 同 Service 下的 Pod 可以直接根据 PodIP 相互通信
    • 不同 Service下的pod在集群间pod通信要借助于 ClusterIP
    • Pod 和集群外通信,要借助于node ip
  • 在 kubernetes 查询 Pod IP

    kubectl get pods -n kubernetes-dashboard -o wide

1.3、ClusterIP

  • Service 的 IP 地址为虚拟 IP 地址。外部网络无法 ping 通,只有 kubernetes 集群内部访问使用。

  • ClusterIP是一个虚拟的 IP,但更像是一个伪造的 IP 网络,原因有以下几点:

    • ClusterIP 仅仅作用于 Kubernetes Service 这个对象,并由 Kubernetes 管理和分配地址
    • ClusterIP 无法被 ping,他没有一个“实体网络对象”来响应
    • ClusterIP 只能结合 Service Port 组成一个具体的通信端口,单独的 ClusterIP 不具备通信的基础,并且他们属于 Kubernetes 集群这样一个封闭的空间。
  • 在不同 Service 下的 Pod 节点在集群间可以通过 ClusterIP 相互访问

  • 在kubernetes查询Cluster IP

    kubectl get svc -n kubernetes-dashboard

2、Port类型

2.1、nodePort

  • 外部流量访问k8s集群中service入口的一种方式(另一种方式是LoadBalancer),即nodeIP:nodePort是提供给外部流量访问k8s集群中service的入口。比如外部用户要访问k8s集群中的一个Web应用,那么我们可以配置对应service的type=NodePort,nodePort=30001。其他用户就可以通过浏览器http://node:30001访问到该web服务。而数据库等服务可能不需要被外界访问,只需被内部服务访问即可,那么我们就不必设置service的NodePort。

  • nodePort 方式会自动在集群所有的 worker 节点监控这个端口,客户端可以方位任何一个node的这个端口都能访问到服务

2.1、port

  • k8s集群内部服务之间访问 service 的入口。即clusterIP:port是service暴露在clusterIP上的端口。mysql容器暴露了3306端口,集群内其他容器通过33306端口访问mysql服务,但是外部流量不能访问mysql服务,因为mysql服务没有配置NodePort。

对应的service.yaml如下:

apiVersion: v1
kind: Service
metadata:
 name: mysql-service
spec:
 ports:
 - port: 33306
   targetPort: 3306
 selector:
  name: mysql-pod

2.1、targetPort

  • 容器的端口(最终的流量端口)。targetPort是pod上的端口,从port和nodePort上来的流量,经过kube-proxy流入到后端pod的targetPort上,最后进入容器。

制作容器时暴露的端口一致(使用DockerFile中的EXPOSE),例如官方的nginx(参考DockerFile)暴露80端口。
对应的service.yaml如下:

apiVersion: v1
kind: Service
metadata:
 name: nginx-service
spec:
 type: NodePort         // 有配置NodePort,外部流量可访问k8s中的服务
 ports:
 - port: 30080          // 服务访问端口
   targetPort: 80       // 容器端口
   nodePort: 30001      // NodePort
 selector:
  name: nginx-pod

2.1、hostPort

  • 这是一种直接定义 Pod 网络的方式。hostPort 是直接将容器的端口与所调度的 Worker 节点上的端口路由,这样用户就可以通过 Worker 主机的 IP 加上来访问 Pod 了,如:
apiVersion: v1
kind: Pod
metadata:
  name: influxdb
spec:
  containers:
    - name: influxdb
      image: influxdb
      ports:
        - containerPort: 8086
          hostPort: 8086

这样做有个缺点,因为Pod重新调度的时候该Pod被调度到的宿主机可能会变动,这样就变化了,用户必须自己维护一个Pod与所在宿主机的对应关系。
使用了 hostPort 的容器只能调度到端口不冲突的 Node 上,除非有必要(比如运行一些系统级的 daemon 服务),不建议使用端口映射功能。如果需要对外暴露服务,建议使用 NodePort Service。

  • port和nodePort都是service的端口,前者暴露给k8s集群内部服务访问,后者暴露给k8s集群外部流量访问。从上两个端口过来的数据都需要经过反向代理kube-proxy,流入后端pod的targetPort上,最后到达pod内的容器。

标签:TargetPort,service,Service,IP,端口,访问,PodIP,NodePort,Pod
From: https://www.cnblogs.com/edeny/p/17285808.html

相关文章

  • k8s service nodeport
    服务(Service)将运行在一组Pods上的应用程序公开为网络服务的抽象方法。Kubernetes中Service的一个关键目标是让你无需修改现有应用程序就能使用不熟悉的服务发现机制......
  • k8s中port、nodePort、targetPort概念的区分
    port是service端口,即k8s中服务之间的访问端口targetport是pod(也就是容器)的端口nodeport是容器所在node节点的端口,即外部机器可访问的端口。(通过nodeport类型的service......
  • 『中级篇』k8s的NodePort类型Service以及Label的简单实用(68)
    型,clusterIp,这次说下NodePort。源码:​​https://github.com/limingios/docker/tree/master/No.10​​通过pod创建service进入labs目录下的servicecddeployk8s-mastercdla......
  • k8s--service 之 HeadLiness、NodePort 使用
    前戏环境还是使用我们上节的环境HeadLiness在某些场景中,开发人员可能不想使用Service提供的负载均衡功能,而希望自己来控制负载均衡策略,针对这种情况,kubernetes 提供了H......
  • FabEdge 和 SuperEdge 联合在边缘 K8s 集群支持原生 Service 云边互访和 PodIP 直通
       背景在边缘计算的场景下,边缘节点和云端为单向网络,从云端无法直接访问边缘节点,导致了以下的问题:云端无法访问边缘端的service;边访问云端service需要以nodeport......
  • 聊聊如何让办公网络直连Kubernetes集群PodIP/ClusterIP/Service DNS等
    想象一下,如果您日常使用的研发测试Kubernetes集群,能够有以下效果:在办公网络下直接访问PodIP在办公网络下直接访问ServiceClusterIP在办公网络下直接访问集群内部域......
  • 记录一下阿里云ACK的nodeport Local Cluster
    背景:很久很近以前(恩200多天前了),创建了一个服务应用,使用了nodeport的方式对外暴露服务,划重点--控制台创建的网络服务:过程就是这样的......一直相安无事。但是不明所以今天......
  • K8s nodePort、port、targetPort、hostPort
    转载:https://blog.csdn.net/chainsmoker_/article/details/1244498901.nodePort外部流量访问k8s集群中service入口的一种方式(另一种方式是LoadBalancer),即nodeIP:nodeP......
  • k8s--service 之 HeadLiness、NodePort 使用
    前戏环境还是使用我们上节的环境:https://www.cnblogs.com/zouzou-busy/p/16156384.htmlHeadLiness在某些场景中,开发人员可能不想使用Service提供的负载均衡功能,而希望......
  • Kubernetes--NodePort类型的Service资源
    NodePort类型的Service资源NodePort即节点Port,通常在安装部署Kubernetes集群系统时会预留一个端口范围用于NodePort,默认为30000~32767之间的端口。与ClusterIP类型的可省......