K8s简述NodePort
前言
最近在学习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相关推荐
- 『中级篇』k8s的NodePort类型Service以及Label的简单实用(68)
原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:『中级篇』k8s的NodePort类型Service以及Label的简单实用(68) 上次主要说了service的一种类型,c ...
- 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 ...
- k8s 更改NodePort默认端口范围
kubeadm 更改NodePort端口范围 kubernetes默认端口号范围是 30000-32767 ,如果期望值不是这个区间则需要更改. 1.找到配置文件里,一般的在这个文件夹下: /etc/ ...
- k8s nodepoet 端口修改_限定k8s的nodeport只在固定主机上开放
isun kubernetes 浏览:1,145 八月 6, 2020 默认情况下kubernetes会在集群所有主机上开放nodeport,我们可以限制nodeport端口只在固定几台主机上开放,这 ...
- k8s minikube部署hbase
一 yaml k8s和minikube的暴露服务是不同的 k8s 用 Nodeport minikube 用 LoadBalancer + minikube tunnel 二 minikube 1 h ...
- Blazor+Dapr+K8s微服务之基于WSL安装K8s集群并部署微服务
前面文章已经演示过,将我们的示例微服务程序DaprTest1部署到k8s上并运行.当时用的k8s是Docker for desktop 自带的k8s,只要在Docker for desktop中启用 ...
- k8s挂载目录_拥抱云原生,如何将开源项目用k8s部署?
k8s以及云原生相关概念近年来一直比较火热,阿丸最近搞了个相关项目,小结一下. 本文将重点分享阿里开源项目otter适配k8s部署的改造过程,其中的改造过程和技巧应该适用于将大多数开源项目改造到k8s ...
- K8S在centeros中的部署
参考文章:Kubernetes(k8s) 1.23.6版本基于Docker的集群安装部署 其他参考:Kubernetes集群环境的搭建 一.前言: 01.如安装过程中出错,可以把整个K8S删除掉,命令 ...
- jenkins使用自定义方式结合k8s实现ci/cd-后端实战
前情交代: 在开发环境已经打好了镜像包,并且次镜像包在test环境已经测试通过,现在开发生产环境实现流水线的k8s部署 k8s 应部署完毕,环境ok jenkins部署完毕 工作重点在jenkins的 ...
- k8s问题及解决方法
k8s相关问题及解决方法 文章目录 k8s相关问题及解决方法 1. 如何修改k8s默认nodePort端口范围 2. 内存溢出导致pod容器退出重启(OOM) 出现pod容器OOM的原因 查看pod容 ...
最新文章
- JAVA-初步认识-第三章-if语句练习-星期和季节
- NLP1 —— Python自然语言处理环境搭建
- shell在手分析服务器日志不愁
- android和ios HybridApp的js交互
- ffplay分析(视频解码线程的操作)
- Maven的安装以及在Myeclipse上的配置——超详细
- 【Qt开发经验】Qt信号槽连接不成功问题原因汇总
- QT中的滚动条QScrollArea
- mysql5.7.1.16出现[Err] 1146 - Table 'performance_schema.session_status' doesn't exist的解决办法
- STM32F103:二.(3)DHT11温湿度
- 课程设计之学生选课管理系统
- Zircon DDK入门指南
- 数字孪生城市可视化运营管理系统 智慧城市解决方案
- 快速搭建基于CoreUI,Python Flask的管理框架
- 谈个人价值观与企业价值观(2014年收官之作,值得深思)
- 华为鸿蒙麒麟玉兔_华为!《鸿蒙出世:中国神兽图鉴》
- ubuntu backup-manager 高效备份工具
- 【数方大数据】什么是三网运营商大数据精准获客?
- linux sensor驱动,i2c,input,sysfs
- android h 游戏下载地址,Android h游戏_如何在Android手机上玩游戏