前言

最近在学习Kubernetes的过程中,由于都是在K8s集群内部进行Docker通信的,就遇到了如何暴露服务给外界访问的问题,生产环境比较好的方案就是借助云服务商使用LoadBalancer的方式,但由于是测试环境就使用了比较简单的NodePort来暴露服务,在实践过程中,也加深了对K8s概念的理解。

Service

把一组Pods抽象为网络服务,通过K8s你不需要通过修改程序的服务发现机制来管理通信。K8s给每个Pods独立的IP,以及给一组Pods一个DNS并通过负载均衡的方式进行访问。

动机

K8s的Pods是有生命周期的,通常是可以被创建和销毁的,然后销毁之后就不会再启动了。如果采用的是Deployment,则可以动态的创建和销毁Pod。

每个Pod都有自己的IP,但是在Deployment中创建的Pod,先创建的可能会和后面创建Pod的IP地址不同。

那么就会出现一个问题,如果一组Pod为服务调用方,一组Pod为服务提供方,服务调用者怎么找到服务提供者的地址?

Service 资源

Kubernetes的Service定义了一种抽象:逻辑上的一组Pod,一种可以访问它们的方式。这一组Pod能通过Service被访问到,通过是通过Selector来实现的。

举个例子,如果后台有三个节点提供图片访问服务,调用者可以通过Service进行访问,它不需要知道具体访问的是哪一个节点,具体的策略由Service来配置,并实现负载均衡。某种意义上也是服务发现和解耦。

nodePort

外部流量访问K8s的一种方式,即nodeIP:nodePort,是提供给外部流量访问K8s集群资源的一种方式。

例如需要暴露服务的端口给外界访问的话可以通过命令:

kubectl expose deployment nginx --type=NodePort

可以随机暴露出一个端口外部访问的端口(默认值:30000-32767)出来。由于暴露的端口往往都比较大,这时候可以采用nginx反向代理的方式,为外界提供访问服务(HTTP:80,HTTPS:443)。

除了使用命令之外也可以使用yaml配置文件的方式进行服务的配置,如下所示:

apiVersion: v1
kind: Service
metadata:name: nginx-service
spec:type: NodePort         // 配置为NodePort,外部可以访问ports:- port: 30080          // 容器间,服务调用的端口targetPort: 80       // 容器暴露的端口,与Dockerfile暴露端口保持一致nodePort: 30001      // NodePort,外部访问的端口selector:name: nginx-pod

然后如果是一些内部的服务,比如数据库服务,或者除了网关以外的微服务,这些服务是不需要外部访问的。因此没有必要设置nodePort属性。

port

K8s集群内部服务访问service的入口。是service暴露在Cluster上的端口,ClusterIP:Port。如下面的yaml配置文件所示,K8s集群内部节点可以通过30080端口访问Nginx服务,然而外部网络还是不能够访问到服务,因为nodePort参数没有配置。

apiVersion: v1
kind: Service
metadata:name: nginx-service
spec:ports:- port: 30080targetPort: 80selector:name: nginx-pod

targetPort

容器的端口,也是最终底层的服务所提供的端口,所以说targetPod也就是Pod的端口。从port或者是nodePort进入的流量,经过路由转发之后,最终都会都通过targetPort进入到Pod中。

与容器创建时暴露的端口保持一致,具体演示如下所示:

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

总结

总体来说,除了targetPort是容器本身的端口之外,port和nodePod都是Service的端口。不同的是port是暴露给K8s访问的,nodePort是暴露给外部访问的。

K8s简述NodePort相关推荐

  1. 『中级篇』k8s的NodePort类型Service以及Label的简单实用(68)

    原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:『中级篇』k8s的NodePort类型Service以及Label的简单实用(68) 上次主要说了service的一种类型,c ...

  2. k8s的nodeport端口范围provided port is not in the valid range. The range of valid ports is 30000-32767 解决

    编辑 kube-apiserver.yaml文件 vim /etc/kubernetes/manifests/kube-apiserver.yaml 找到 --service-cluster-ip-r ...

  3. k8s 更改NodePort默认端口范围

    kubeadm 更改NodePort端口范围 kubernetes默认端口号范围是 30000-32767 ,如果期望值不是这个区间则需要更改. 1.找到配置文件里,一般的在这个文件夹下: /etc/ ...

  4. k8s nodepoet 端口修改_限定k8s的nodeport只在固定主机上开放

    isun kubernetes 浏览:1,145 八月 6, 2020 默认情况下kubernetes会在集群所有主机上开放nodeport,我们可以限制nodeport端口只在固定几台主机上开放,这 ...

  5. k8s minikube部署hbase

    一 yaml k8s和minikube的暴露服务是不同的 k8s 用 Nodeport minikube 用 LoadBalancer + minikube tunnel 二 minikube 1 h ...

  6. Blazor+Dapr+K8s微服务之基于WSL安装K8s集群并部署微服务

     前面文章已经演示过,将我们的示例微服务程序DaprTest1部署到k8s上并运行.当时用的k8s是Docker for desktop 自带的k8s,只要在Docker for desktop中启用 ...

  7. k8s挂载目录_拥抱云原生,如何将开源项目用k8s部署?

    k8s以及云原生相关概念近年来一直比较火热,阿丸最近搞了个相关项目,小结一下. 本文将重点分享阿里开源项目otter适配k8s部署的改造过程,其中的改造过程和技巧应该适用于将大多数开源项目改造到k8s ...

  8. K8S在centeros中的部署

    参考文章:Kubernetes(k8s) 1.23.6版本基于Docker的集群安装部署 其他参考:Kubernetes集群环境的搭建 一.前言: 01.如安装过程中出错,可以把整个K8S删除掉,命令 ...

  9. jenkins使用自定义方式结合k8s实现ci/cd-后端实战

    前情交代: 在开发环境已经打好了镜像包,并且次镜像包在test环境已经测试通过,现在开发生产环境实现流水线的k8s部署 k8s 应部署完毕,环境ok jenkins部署完毕 工作重点在jenkins的 ...

  10. k8s问题及解决方法

    k8s相关问题及解决方法 文章目录 k8s相关问题及解决方法 1. 如何修改k8s默认nodePort端口范围 2. 内存溢出导致pod容器退出重启(OOM) 出现pod容器OOM的原因 查看pod容 ...

最新文章

  1. JAVA-初步认识-第三章-if语句练习-星期和季节
  2. NLP1 —— Python自然语言处理环境搭建
  3. shell在手分析服务器日志不愁
  4. android和ios HybridApp的js交互
  5. ffplay分析(视频解码线程的操作)
  6. Maven的安装以及在Myeclipse上的配置——超详细
  7. 【Qt开发经验】Qt信号槽连接不成功问题原因汇总
  8. QT中的滚动条QScrollArea
  9. mysql5.7.1.16出现[Err] 1146 - Table 'performance_schema.session_status' doesn't exist的解决办法
  10. STM32F103:二.(3)DHT11温湿度
  11. 课程设计之学生选课管理系统
  12. Zircon DDK入门指南
  13. 数字孪生城市可视化运营管理系统 智慧城市解决方案
  14. 快速搭建基于CoreUI,Python Flask的管理框架
  15. 谈个人价值观与企业价值观(2014年收官之作,值得深思)
  16. 华为鸿蒙麒麟玉兔_华为!《鸿蒙出世:中国神兽图鉴》
  17. ubuntu backup-manager 高效备份工具
  18. 【数方大数据】什么是三网运营商大数据精准获客?
  19. linux sensor驱动,i2c,input,sysfs
  20. android h 游戏下载地址,Android h游戏_如何在Android手机上玩游戏

热门文章

  1. 3D建模和渲染的硬件配置怎么选?这里有答案
  2. 暗月渗透实战靶场-项目七(下)
  3. 离散数学自反闭包对称闭包传递闭包C语言代码实现
  4. mysql fprintf_matlab中fprintf函数的用法详解
  5. appium之微信公众号自动化测试实战
  6. 【Excel VBA】一键取消excel中所有隐藏sheet
  7. HDU6070 Dirt Ratio
  8. 三星复印机载体初始化步骤_三星复印机的使用方法
  9. vscode背景的更换_vscode背景图怎么换
  10. 苹果企业级开发者账号申请详解