首页 > 编程语言 >K8s nodePort、port、targetPort、hostPort

K8s nodePort、port、targetPort、hostPort

时间:2022-10-25 21:13:33浏览次数:70  
标签:targetPort service 端口 访问 nodePort hostPort K8s port

转载:

https://blog.csdn.net/chainsmoker_/article/details/124449890

1. nodePort

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

2. 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

3. 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
 

4. hostPort

这是一种直接定义Pod网络的方式。hostPort是直接将容器的端口与所调度的节点上的端口路由,这样用户就可以通过宿主机的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。

5. 总结

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

标签:targetPort,service,端口,访问,nodePort,hostPort,K8s,port
From: https://www.cnblogs.com/bangbangzoutianya/p/16826306.html

相关文章

  • k8s-标签(labels)
    官网https://kubernetes.io/zh-cn/docs/concepts/overview/working-with-objects/labels/标签(Labels)是附加到Kubernetes对象(比如Pod)上的键值对。标签旨在用于指定......
  • k8s的安装8
    k8s的安装8我们这次的k8s是yum装的,yum安装的k8s的版本是多少?rpm-qa|grepkubernetes查看版本,如下图所示因为红帽只做了1.5版本的k8s包,所以yum只能装1.5版,虽然这种yum......
  • k8s-pod控制器Deployment
    在kubernetes中,Pod是最小的控制单元,但是kubernetes很少直接控制Pod,一般都是通过Pod控制器来完成的。Pod控制器用于pod的管理,确保pod资源符合预期的状态,当pod的资源出现故......
  • k8s的历史7
    k8s的历史7到底什么是k8s,k8s有什么功能,我们都不清楚?k8s是一个docker集群的管理工具,k8s的核心功能自我修复:一旦这个容器死了,没关系,k8s会自动在其他的节点上给它跑起......
  • k8s之serviceAccount创建
    1、创建serviceAccountvim serviceAccount.yaml---apiVersion:v1kind:ServiceAccountmetadata:name:springcloud-kubernetesnamespace:dev---kind:Rol......
  • k8s安装nfs插件
    1、创建rbac权限vimrbac.yamlkind:ClusterRoleapiVersion:rbac.authorization.k8s.io/v1metadata:name:nfs-provisioner-runnerrules:-apiGroups:[""]......
  • 为k8s集群安装docker私有仓库6
    为k8s集群安装docker私有仓库6接下来我们为k8s集群配置一个仓库,仓库我们选择dockerregistry,比较省资源,一个harbor没有2G的内存带不动,所以我们选择功能简单,配置也少的regi......
  • k8s证书更新
    k8s证书更新(k8s版本>1.4的适用)本次更新的版本是1.17.51、检查证书有效期kubeadmalphacertscheck-expiration2、备份证书cp-r/etc/kubernetes /etc/kubernetes_b......
  • k8s三种资源管理方式
    三种方式命令式对象管理命令式对象配置声明式对象配置三种方式怎么使用创建/更新资源使用声明式对象配置kubectlapply-fXXX.yaml删除资源使用命令式对象配置......
  • .net core 5 k8s win32 error 258问题记录
    同文搜索到结论:https://www.cnblogs.com/xwgli/p/13800550.html今日在K8S中测试高并发,压测到1万+个TCP连接,内部每40S定时查询一次接口,采用同步轮询每秒大约100个请求一次,......