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
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

最新文章

  1. 目前在做的一个web应用程序的前端选型
  2. 如何在CentOS 6.5上安装EPEL 源
  3. Lua修改文件名
  4. dev uploadcontrol 上传图片
  5. 黄聪:Emeditor 编辑器常用的正则表达式
  6. POJ 2003 Hire and Fire (Tree)
  7. SWT的CheckBoxTreeView的上级菜单与下级菜单的选中的实现
  8. iptables规则进阶
  9. oracle数据库热备中的备份和恢复及例子
  10. vuethink 在本地没问题,在服务器报错 , php5.6与php5.5之间的大坑
  11. centos 5.3 安装(samba 3.4.4)
  12. with管理文件操作上下文
  13. django2.0.6 连接使用redis集群
  14. JAVA中接口与抽象类
  15. copy 深浅复制
  16. 一文看懂显示关键材料之彩色滤光片(Color Filter)
  17. 软工1816 · Beta冲刺(4/7)
  18. 洛谷——P2756 飞行员配对方案问题
  19. redis阻塞bgsave与bsrewriteaof
  20. Java连接DB2

热门文章

  1. NOIP 模拟二 考试总结
  2. Edit Step Ladders - UVA 10029
  3. SpringBoot-语言国际化
  4. Java 创建PDF打印小册子
  5. Frida高级逆向-Hook Native(Java So)2
  6. 如何正确使用JMeter性能测试?紧扣面试实际要求
  7. 2.3 Core Building Blocks 核心构件
  8. 【UE4 C++】抛物线路径、发射轨道相关
  9. 你知道什么是JUC了吗?
  10. 是兄弟就来摸鱼 Scrum Meeting 博客汇总