K8S使用NodePort类型Service
1、使用nodetype类型
1.1、第一种类型创建:直接在yaml中标记是nodePort
apiVersion: v1
kind: Service
metadata:
name: nginx-service-nodeport
spec:
selector:
app: nginx
ports:
- name: http
port: 8000
protocol: TCP
targetPort: 80
- name: https
port: 8443
protocol: TCP
targetPort: 443
type: NodePort
1.1、查询service进行比较
-1、观察对比可以看见,在暴露的端口后面跟着一个端口
-2、pod还是上一个步骤创建的pod,并没有发生任何改变-3、也就是说pod的访问方式还是可以进行的
-4、那么创建的service如果进行访问?
- service的clusterip可以使用,使用方式serviceClusterIP:port(其他方式都不行),所有的节点都可以通过访问serviceClusterIP:port进行访问服务
- pod的clusterip进行访问,使用方式podClusterIP:targetport,但是每个节点只能使用自己节点的podClusterIP访问自己的pod
- node的ip进行访问,使用方式nodeIP:nodePort(如果nodePort没有指定,创建service会自动生成一个)
1.2、使用错误说明:
- 如果pod在running,但是服务不能访问,就查看一下service的pod有没有写正确
2、直接暴露端口,不创建service使用nodetype类型
2.1、创建pod
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- name: http
port: 8000
protocol: TCP
targetPort: 80
- name: https
port: 8443
protocol: TCP
targetPort: 443
2.2、直接暴露端口
kubectl run --port=80(或者kubectl expose --port=80)
kubectl expose deployment nginx-deployment-2 --type=NodePort
- 直接对deployment进行expose,指定暴露类型
- 直接expose,会生成一个和deployment一样名称的service
- 直接expose,不指定暴露的端口,会默认将targetPort(80)暴露到一个随机的端口(22796)上
- 依然可以使用serviceIP:targetPort进行服务访问
- 使用方式和修改yaml添加type是完全一样的
- 如果直接expose指定port,会使用你指定的端口去覆盖你最开始设置的targetPort和port
- 以前在进行service创建的时候,port和targetPort可以不一样,但是如果直接expose就会直接修改port和targetPort,可能导致我们的pod不能访问,所以在expose的时候,最好不要添加"port=8081"
#最好不使用port=8081参数,会修改port和target导致不能访问
kubectl expose deployment nginx-deployment-2 --type=NodePort --port=8081
- 创建service时,保持targetPort和containerPort一致,最好也和port一样,免得生是非
3、使用nodetype类型总结
1、没有办法在外部网络访问一个IP直接进行pod负载,只能通过nodeIP:nodePort进行同一个Node上pod的负载访问
2、没有办法访问一个名称映射到服务上面
3、最好的方式,创建完deployment之后,直接expose生成service,此时你就不用管你到底要暴露什么port和targetport,系统会自动帮你生成,如果此时你感觉nodePort不是你要的,或者clusterIP不是你要的,你直接edit创建的service即可
4、如果感觉expose有点麻烦,还是想创建service.yaml文件,就直接按照下面模板进行更改即可
apiVersion: v1
kind: Service
metadata:
labels:
app: nginx
name: nginx-service
namespace: default
spec:
clusterIP: 10.68.232.62(可以手动指定)
externalTrafficPolicy: Cluster
ports:
- name: nginx
protocol: TCP
port: 80
targetPort: 80
nodePort: 26363(范围:20000-40000)
selector:
app: nginx
type: NodePort
作者:糖纸疯了
链接:https://www.jianshu.com/p/75af95641c91
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
K8S使用NodePort类型Service的更多相关文章
- 【转帖】k8s之Deployment与service
k8s之Deployment与service 2018年08月05日 18:11:00 xiyou_pen/pen 阅读数 5894 版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权 ...
- Kubernetes【K8S】(五):Service
Service概念 Kubernetes Service定义了一个Pod的逻辑分组,一种可以访问它们的策略.这组Pod能被Service访问到,通常是通过label Selector. Service ...
- k8s~k8s里的服务Service
k8s用命名空间namespace把资源进行隔离,默认情况下,相同的命名空间里的服务可以相互通讯,反之进行隔离. 服务Service 1.1 Service Kubernetes中一个应用服务会有一个 ...
- [置顶]
kubernetes资源类型--Service
为了适应快速的业务需求,微服务架构已经逐渐成为主流,微服务架构的应用需要有非常好的服务编排支持.K8S中的核心要素Service便提供了一套简化的服务代理和发现机制,天然适应微服务架构. 实现原理 S ...
- k8s创建pod和service的过程
一.概念介绍 更详细的参见:https://www.kubernetes.org.cn/5335.html 1.K8s K8s 是一种用于在一组主机上运行和协同容器化应用程序的系统,提供应用部署.规划 ...
- k8s定义Deployment,和service
定义一个Deployment和service做个简单的笔记 有时候我们需要开放Pod的多个端口,比如nginx的80和443端口,那如何定义Deployment文件呢,定义单个端口如下 apiVers ...
- k8s的认证和service account简述
k8s的认证: 与API server通信的客户端大致有两类: 1.集群客户端工具(kubectl.kubeadm.kubelet等) 2.集群内pod. 任何客户端访问k8s时的过程: 1.认 ...
- k8s~跨namespace的service相互访问
在k8s里,你可以通过服务名去访问相同namespace里的服务,然后服务可以解析到对应的pod,从而再由pod转到对应的容器里,我们可以认为这个过程有两个port的概念,service port 就 ...
- 腾讯云 K8S 集群实战 Service Mesh—Linkerd2 & Traefik2 部署 emojivoto 应用
Linkerd 是 Kubernetes 的服务网格. 它通过为您提供运行时调试(runtime debugging).可观察性(observability).可靠性(reliability)和安全性 ...
随机推荐
- C语言数组的创建和使用
C语言数组的创建和使用 数组是一组相同类型元素的集合. 一维数组的创建及初始化 //创建int类型的数组 //直接创建:不对数组进行初始化 int arr1[10]; //最常用.好用的创建方式 in ...
- Redis对象
概述 Redis并没有使用基础数据结构去实现键值数据库,而是基于数据结构封装了一个个对象. 类型和编码 由于Redis是键值数据库,所以每次存储数据时,至少包含两个对象,即K.V对应的对象.其数据结构 ...
- 微信小程序访问豆瓣api报403错误解决方法
通过豆瓣API可以获取很多电影.书籍的数据信息,今天在调用豆瓣正在上映电影接口的时候报403错误,原因是豆瓣设置了小程序的访问权限.如下: 解决方法是使用代理,将豆瓣API地址换成 https://d ...
- 题解 CF1172E Nauuo and ODT
题目传送门 题目大意 给出一个 \(n\) 个点的树,每个点有颜色,定义 \(\text{dis}(u,v)\) 为两个点之间不同颜色个数,有 \(m\) 次修改,每次将某个点的颜色进行更改,在每次操 ...
- Java爬虫系列四:使用selenium-java爬取js异步请求的数据
在之前的系列文章中介绍了如何使用httpclient抓取页面html以及如何用jsoup分析html源文件内容得到我们想要的数据,但是有时候通过这两种方式不能正常抓取到我们想要的数据,比如看如下例子. ...
- 2021.3.10--vj补题
B - Saving the City cf--1443B Bertown is a city with nn buildings in a straight line. The city's sec ...
- Java(31)泛型和可变参数
作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15228443.html 博客主页:https://www.cnblogs.com/testero ...
- python中对列表的排序
1.sort()对列表永久性的排序,首字母按照字母表的顺序排列 book=['python','java','c++','web'] book.sort() print(book) 结果如下: 2.向 ...
- Object.create 和 Object.assign
Object.assign(target, ...source) 1.Object.assign方法只会拷贝源对象自身(不包括原型)的并且可枚举的属性到目标对象,使用源对象的get和目标对象的set, ...
- javascript-jquery的基本方法
1.去除字符串中两端的空格$.trim(str) var str1=" 123 " $.trim(str1);//123 2.遍历对象的数据并进行操作$.each(obj,func ...











