欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

k8s中port、nodePort、targetPort概念的区分

程序员文章站 2022-03-12 11:52:39
...

1. 三种类型端口所应用的位置不同

port是service的端口

targetport是pod(也就是容器)的端口

nodeport是容器所在node节点的端口(实质上也是通过nodeport类型的service暴露给集群节点,但port没有service类型)

2. 三种类型端口的作用不同

  • port

port的主要作用是集群内其他pod访问本pod时,需要一个port,如nginx的pod访问mysql的pod,那么mysql的pod的service可以如下定义:

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

由此可以这样理解,port是service的port,nginx访问service的3306端口。

  • targetport

同样,targetport是pod暴露出来的端口,当nginx的一个请求到达service的3306端口时,service就会根据selector中的name,把此请求转发到mysql-pod这个pod的3306端口上。

  • nodeport

nodeport就很好理解了,它是集群外客户端访问集群内服务时所访问的端口,比如客户访问下面的集群中的nginx,就是这样的方式。

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 

3. 总结

  • nodeport是集群外流量访问集群内服务的端口类型,比如客户访问nginx,apache

  • port是集群内pod互相通信用的端口类型,比如nginx访问mysql,而mysql是不需要让集群外部客户端访问到的

  • targetport,顾名思义目标端口,也就是最终端口,即pod的端口

相关标签: K8S