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的更多相关文章

  1. 【转帖】k8s之Deployment与service

    k8s之Deployment与service 2018年08月05日 18:11:00 xiyou_pen/pen 阅读数 5894   版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权 ...

  2. Kubernetes【K8S】(五):Service

    Service概念 Kubernetes Service定义了一个Pod的逻辑分组,一种可以访问它们的策略.这组Pod能被Service访问到,通常是通过label Selector. Service ...

  3. k8s~k8s里的服务Service

    k8s用命名空间namespace把资源进行隔离,默认情况下,相同的命名空间里的服务可以相互通讯,反之进行隔离. 服务Service 1.1 Service Kubernetes中一个应用服务会有一个 ...

  4. [置顶] kubernetes资源类型--Service

    为了适应快速的业务需求,微服务架构已经逐渐成为主流,微服务架构的应用需要有非常好的服务编排支持.K8S中的核心要素Service便提供了一套简化的服务代理和发现机制,天然适应微服务架构. 实现原理 S ...

  5. k8s创建pod和service的过程

    一.概念介绍 更详细的参见:https://www.kubernetes.org.cn/5335.html 1.K8s K8s 是一种用于在一组主机上运行和协同容器化应用程序的系统,提供应用部署.规划 ...

  6. k8s定义Deployment,和service

    定义一个Deployment和service做个简单的笔记 有时候我们需要开放Pod的多个端口,比如nginx的80和443端口,那如何定义Deployment文件呢,定义单个端口如下 apiVers ...

  7. k8s的认证和service account简述

    k8s的认证: 与API server通信的客户端大致有两类:  1.集群客户端工具(kubectl.kubeadm.kubelet等)  2.集群内pod. 任何客户端访问k8s时的过程:  1.认 ...

  8. k8s~跨namespace的service相互访问

    在k8s里,你可以通过服务名去访问相同namespace里的服务,然后服务可以解析到对应的pod,从而再由pod转到对应的容器里,我们可以认为这个过程有两个port的概念,service port 就 ...

  9. 腾讯云 K8S 集群实战 Service Mesh—Linkerd2 & Traefik2 部署 emojivoto 应用

    Linkerd 是 Kubernetes 的服务网格. 它通过为您提供运行时调试(runtime debugging).可观察性(observability).可靠性(reliability)和安全性 ...

随机推荐

  1. NOIP 模拟 六十八

    咕了十几场了,还是写一写吧.. T1 玩水 发现满足三个人路径不同必须要有2个及以上的斜线相同结构,需要注意如果同一行或者同一列的话必须要相邻才行. #include<bits/stdc++.h ...

  2. C++: 基于四叉树数据结构的自适应网格(初探)

    C++: 基于四叉树数据结构的自适应网格 二叉树是一种典型的非线性存储数据结构,查找效率可以达到\(O(log_2N)\),同样,这类树状结构存在许多种变体,详细参考邓俊辉老师的<数据结构C++ ...

  3. C语言日记① 初识C

    概念 c语言是一种计算机语言 也就是人与计算机打交道的语言 在早期,因为计算机使用的二进制 所以早期写代码都是科学家来写的使用对应的功能二进制代码 需要用到手册,所以开发不方便 在后来,人们发明了汇编 ...

  4. java 从零开始手写 RPC (05) reflect 反射实现通用调用之服务端

    通用调用 java 从零开始手写 RPC (01) 基于 socket 实现 java 从零开始手写 RPC (02)-netty4 实现客户端和服务端 java 从零开始手写 RPC (03) 如何 ...

  5. nginx负载均衡部署

    1 系统版本 CentOS Linux release 6.0.1708 (Core) 2 编译安装前所需要的准备: 1.GCC编译器 首先检查GCC是否安装,命令:gcc -v ,如果显示有相关版本 ...

  6. SphereEx 获数百万美元天使融资,接力 ShardingSphere 开启 Database Plus 新篇章

    5月14日,数据前沿技术领域初创公司 SphereEx 获得来自红杉中国种子基金.初心资本的数百万美元天使轮融资. SphereEx是一家致力于构建新型分布式数据基础设施的公司,秉承开源.共享.生态. ...

  7. NOI 2017 Day1 题解

    被虐爆了... T1 整数 题目传送门 Description 有一个整数 \(x\),有 \(n\) 此操作,每次操作为以下两种情况: 给出 \(a,b\),将 \(x\) 加上 \(a\times ...

  8. 【死磕 NIO】— Reactor 模式就一定意味着高性能吗?

    大家好,我是大明哥,我又来了. 为什么是 Reactor 一般所有的网络服务,一般分为如下几个步骤: 读请求(read request) 读解析(read decode) 处理程序(process s ...

  9. 在Excel中,不利用任何第三方工具,生成二维码

    有同事提需求,要批量生成二维码.谈了之后,我觉得可以做个excel文件,把要打印的内容放进去,然后给每行数据生成一个二维码.下一步就要在Excel里面生成二维码.问了一下度娘,貌似都得利用一些第三方工 ...

  10. sip信令跟踪工具sngrep

    概述 在VOIP的使用过程中,最常见的问题就是信令不通和语音质量问题. 通常的问题跟踪手段包括日志分析.抓包分析. 抓包的工具有wireshark.tcpdump等等,如果是只针对sip信令的抓包,则 ...