k8s nodeport无法访问_k8s学习之service详解
1.概述
通过Deployment来创建一组Pod来提供具有高可用性的服务。每个Pod都会分配一个单独的Pod IP,却存在如下两问题:
1.pod ip仅仅集群内部可见的虚拟IP,外部无法访问
2.pod ip会随着pod的销毁而消失,ip可能会随时变化,导致访问服务不方便
k8s中的service就是解决以上问题的实现服务发现的核心关键。service能够提供负载均衡能力,但是在使用上有以下限制:
只提供4层负载均衡能力,没有7层功能。
2.service类型详解
2.1 service的类型
ClusterIp:默认类型,自动分配一个仅 Cluster 内部可以访问的虚拟 IP
NodePort:在 ClusterIP 基础上为 Service 在每台机器上绑定一个端口,这样就可以通过 :NodePort 来访问该服务
LoadBalancer:在 NodePort 的基础上,借助 cloud provider 创建一个外部负载均衡器,并将请求转发到NodePort。(是付费服务,而且价格不菲)
ExternalName:把集群外部的服务引入到集群内部来,在集群内部直接使用。没有任何类型代理被创建,这只有 kubernetes 1.7 或更高版本的 kube-dns 才支持
2.2 ClusterIP
类型为ClusterIP的service,这个service有一个Cluster-IP,其实就一个VIP。具体实现原理依靠kubeproxy组件,通过iptables或是ipvs实现.这种类型的service 只能在集群内访问。
演示案例
使用tomcat镜像演示
docker pull tomcat:9.0.20-jre8-alpine
资源文件
apiVersion: apps/v1kind: Deploymentmetadata: name: clusterip-demo labels: app: clusterip-demospec: replicas: 1 template: metadata: name: clusterip-demo labels: app: clusterip-demo spec: containers: - name: clusterip-demo image: tomcat:9.0.20-jre8-alpine imagePullPolicy: IfNotPresent ports: - containerPort: 8080 restartPolicy: Always selector: matchLabels: app: clusterip-demo---apiVersion: v1kind: Servicemetadata: name: clusterip-sevcice-demospec: #service管理pod是通过标签来管理的,所以这里选择必须和pod的标签一样 selector: app: clusterip-demo ports: - port: 8080 targetPort: 8080 type: ClusterIP
部署service:
#部署service[root@k8s-master01 service]# kubectl apply -f clusterip-demo.yml deployment.apps/clusterip-demo createdservice/clusterip-sevcice-demo created#查看service 注意虚拟ip 10.1.92.52[root@k8s-master01 service]# kubectl get svcNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEclusterip-sevcice-demo ClusterIP 10.1.92.52 8080/TCP 23skubernetes ClusterIP 10.1.0.1 443/TCP 4d#在集群内部同过curl 访问能访问tomcat[root@k8s-master01 service]# curl 10.1.92.52:8080 Apache Tomcat/9.0.20 ........#service 删除,deployment、pod一并删除[root@k8s-master01 service]# kubectl delete -f clusterip-demo.yml deployment.apps "clusterip-demo" deletedservice "clusterip-sevcice-demo" deleted[root@k8s-master01 service]# kubectl get podNo resources found in default namespace.
2.3 NodePort
实际应用中我们不可能全部都是集群内部访问,肯定也需要集群外部访问,ClusterIP无法满足需求,而NodePort 可以通过实现方案。其原理是在node上开一个端口,将向该端口的流量导入到kube-proxy,然后由 kube-proxy 进一步到给对应的 pod.
案例演示:
资源文件:
apiVersion: apps/v1kind: Deploymentmetadata: name: nodeport-demo labels: app: nodeport-demospec: replicas: 1 template: metadata: name: nodeport-demo labels: app: nodeport-demo spec: containers: - name: nodeport-demo image: tomcat:9.0.20-jre8-alpine imagePullPolicy: IfNotPresent ports: - containerPort: 8080 restartPolicy: Always selector: matchLabels: app: nodeport-demo---apiVersion: v1kind: Servicemetadata: name: nodeport-service-demospec: selector: app: nodeport-demo #注意与pod的标签保持一致(编写时忘了,坑了15分钟) ports: - port: 9090 #集群内部访问ip targetPort: 8080 #映射pod内容器端口 nodePort: 30088 #集群外部访问端口 type: NodePort
部署service
#部署[root@k8s-master01 service]# kubectl apply -f nodeport-demo.yml deployment.apps/nodeport-demo createdservice/nodeport-service-demo created#查看service 注意虚拟ip 10.1.253.107[root@k8s-master01 service]# kubectl get serviceNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEkubernetes ClusterIP 10.1.0.1 443/TCP 4d1hnodeport-service-demo NodePort 10.1.253.107 9090:30088/TCP 8s#集群内部通过curl访问,能访问到tomcat首页[root@k8s-master01 service]# curl 10.1.253.107:9090 Apache Tomcat/9.0.20 .....
集群外部通过浏览器访问 http://192.168.223.131:30088(master)和http://192.168.223.132:30088/(work)
2.3 LoadBalancer(收费的没法玩了)
LoadBalancer类型的service 是可以实现集群外部访问服务的另外一种解决方案。不过并不是所有的k8s集群都会支持,大多是在公有云托管集群中会支持该类型。负载均衡器是异步创建的,关于被提供的负载均衡器的信息将会通过Service的status.loadBalancer字段被发布出去。
apiVersion: v1kind: Servicemetadata: name: service-davidspec: ports: - port: 3000 protocol: TCP targetPort: 443 nodePort: 30080 selector: run: pod-david type: LoadBalancer
2.4 ExternalName(很少用)
类型为 ExternalName 的service将服务映射到 DNS 名称,而不是典型的选择器,例如my-service或者cassandra。可以使用spec.externalName参数指定这些服务。
kind: ServiceapiVersion: v1metadata: name: service-davidspec: ports: - port: 3000 protocol: TCP targetPort: 443 type: ExternalName externalName: www.david.com
k8s nodeport无法访问_k8s学习之service详解相关推荐
- k8s拉取镜像规则_【大强哥-k8s从入门到放弃13】Service详解
一.何为ServiceService 是一个应用服务抽象,定义了 Pod 逻辑集合和访问这个 Pod 集合的策略. Service 代理 Pod 集合对外表现是为一个访问入口,分配一个集群 IP 地址 ...
- 学习笔记之-Kubernetes(K8S)介绍,集群环境搭建,Pod详解,Pod控制器详解,Service详解,数据存储,安全认证,DashBoard
笔记来源于观看黑马程序员Kubernetes(K8S)教程 第一章 kubernetes介绍 应用部署方式演变 在部署应用程序的方式上,主要经历了三个时代: 传统部署:互联网早期,会直接将应用程序部署 ...
- awk命令详解_python学习之利用urllib和urllib2访问http的GET/POST详解
前言 本文主要给大家介绍了关于python如何学习访问http的GET/POST的相关内容,使用urllib和urllib2,可以轻松实现对http的访问,下面话不多说了,来一起看看详细的介绍吧. 示 ...
- Kubernetes Service详解(概念、原理、流量分析、代码)
Kubernetes Service详解(概念.原理.流量分析.代码) 作者: liukuan73 原文:https://blog.csdn.net/liukuan73/article/details ...
- kubernetes,service详解下
kubernetes,service详解下 HeadLiness类型的Service 在某些场景中,开发人员可能不想使用Service提供的负载均衡功能,而希望自己来控制负载均衡策略,针对这种情况,k ...
- 深度学习开发环境调查结果公布,你的配置是这样吗?(附新环境配置) By 李泽南2017年6月26日 15:57 本周一(6 月 19 日)机器之心发表文章《我的深度学习开发环境详解:Te
深度学习开发环境调查结果公布,你的配置是这样吗?(附新环境配置) 机器之心 2017-06-25 12:27 阅读:108 摘要:参与:李泽南.李亚洲本周一(6月19日)机器之心发表文章<我的深 ...
- mysql dba系统学习-数据库事务详解
mysql dba系统学习-数据库事务详解 上个星期去面试数据库管理员的工作,笔试通过之后就是直接的面试,他问了我一个问题,叫我介绍哈数据库的事务的看法和理解,但是不知所错的没有章法的乱答一气,唉唉, ...
- android service是什么,Android service是什么 Android service详解
Android service是什么 Android service详解 时间:2017-04-06 来源:Android开发学习网 什么是Android Service? service是A ...
- java stopself_Android Service详解(二)---StartService
一丶概述 启动服务由另一个组件通过调用 startService() 启动,这会导致调用服务的 onStartCommand() 方法. 服务启动之后,其生命周期即独立于启动它的组件,并且可以在后台无 ...
最新文章
- Keepalived Nginx 高可用性配置
- Gini指数、Gini系数、Gini不纯是一回事吗?
- 除了芯片 我们还应关注哪些核心技术
- GTK+ VS MFC
- php判断数组是否存在字符串中,php判断数组元素中是否存在某个字符串的方法_php技巧...
- Silverlight 布局控件
- 公众号第三方平台开发 - 教程五 代公众号发起网页授权源码
- 【Android自定义View】Bitmap的绘制和颜色滤镜
- 马云等第一代互联网创始人退休,BAT 谁来接手?| 畅言
- java属性定义_Java管理扩展指南--几分钟带你理解MBean
- 寒假作业1 打印沙漏
- Java后台开发入门
- Mysql 纵表转换为横表
- java 实现:求有序数组绝对值最小的数
- 2017-08-25阿里校招笔试题---菜鸟仓库
- Python学习(3)计算个人所得税
- 基于RBAC 的SAAS系统权限设计
- c语言课设菜单,c语言课程设计菜单
- Codeforces Round #552 (Div. 3) E stl模拟 F dp G gcd
- DailyFi - 9.23|Dapper Labs 完成2.5亿美元融资,Vera 在 Polkastarter 上启动IDO
热门文章
- Pytorch学习记录-torchtext和Pytorch的实例( 使用神经网络训练Seq2Seq代码)
- LeetCode简单题之最长和谐子序列
- LeetCode简单题之拥有最多糖果的孩子
- Laravel Dcat Admin 安装
- Lumen框架多数据库连接配置方法
- [JAVA EE]ajax 方式提交数据
- 整数n的倒数第k个数字
- python 中 is 与 == 的区别
- 004_常用词汇句子翻译记录
- Python Day26:多态、封装、内置函数:__str__、__del__、反射(反省)、动态导入模块...