service

  • Kubernete Service 是一个定义了一组Pod的策略的抽象,我们也有时候叫做宏观服务。这些被服务标记的Pod都是(一般)通过label Selector决定的

  • 对于Kubernete原生的应用,Kubernete提供了一个简单的Endpoints API,这个Endpoints api的作用就是当一个服务中的pod发生变化时,Endpoints API随之变化,对于哪些不是原生的程序,Kubernetes提供了一个基于虚拟IP的网桥的服务,这个服务会将请求转发到对应的后台pod


实验

第一步:编写部署nginx-svc的yml文件

╭─root@node1 ~
╰─➤ vim nginx-svc.yml apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx1
spec:
replicas: 2
template:
metadata:
labels:
name: web # 标签 service
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80 # 暴露在pod的ip上的端口
---
apiVersion: v1
kind: Service
metadata:
name: my-svc
spec:
selector:
name: web # 标签 labels
ports:
- port: 80 # service暴露的端口
targetPort: 80 # pods的端口

第二步:运行yml文件

╭─root@node1 ~
╰─➤ kubectl apply -f nginx-svc.yml

第三步:查看标签

╭─root@node1 ~
╰─➤ kubectl get po -o wide --show-labels
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES LABELS
nginx1-7f56c7b7f8-qxqbg 1/1 Running 0 2m33s 10.244.1.6 node2 <none> <none> name=web,pod-template-hash=7f56c7b7f8
nginx1-7f56c7b7f8-zjt9m 1/1 Running 0 2m33s 10.244.2.11 node3 <none> <none> name=web,pod-template-hash=7f56c7b7f8

指定namespace

查看namespace

╭─root@node1 ~
╰─➤ kubectl get namespace
NAME STATUS AGE
default Active 2d19h
kube-node-lease Active 2d19h
kube-public Active 2d19h
kube-system Active 2d19h

编辑yml文件

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx1
namespace: kube-system # 指定namespace
spec:
replicas: 2
template:
metadata:
labels:
name: web
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: my-svc
namespace: kube-system # 指定namespace
spec:
selector:
name: web
ports:
- port: 80

其中:

  1. 通过DNS名称访问,只能在同一名称空间
  2. 如果不是同一名称空间,需要指定namespace

外网访问

第一步:修改yml文件

kind: Deployment
metadata:
name: nginx1
spec:
replicas: 2
template:
metadata:
labels:
name: web
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: my-svc
spec:
type: NodePort # 选择service端口暴露方式
selector:
name: web
ports:
- port: 80
targetPort: 80
nodePort: 30007 # 端口选择范围 30000-32767

第二步:执行yml文件

╭─root@node1 ~
╰─➤ kubectl apply -f nginx-svc.yml

第三步:查看svc

╭─root@node1 ~
╰─➤ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 2d19h
my-svc NodePort 10.109.183.148 <none> 80:30007/TCP 9s

第四步:查看主机端口

╭─root@node1 ~
╰─➤ ss -ntl |grep 30007
LISTEN 0 128 :::30007 :::*

service暴露端口的四种方式:

  1. clusterIP
  2. NodePort
  3. LoadBalance
  4. ExternalName

最新文章

  1. 高性能的JavaScript--加载和执行
  2. VB.Net 2010中 ./和../的含义
  3. NLP情感分析监督学习样本打标
  4. phonegap 2.7 ios配置安装详细教程(2.9通用)
  5. 基于FFmpeg和Qt的播放器 QtAV库
  6. JZ2440开发笔记(4)——设置静态IP
  7. 24种设计模式--状态模式【State Pattern】
  8. Effective Java实作类别 - 就是爱Java
  9. title:EL表达式获取Map里面的数值失败的问题
  10. ROJ 1166 超级贞鱼
  11. AI 系列 总目录
  12. hdu 5130(2014广州 圆与多边形相交模板)
  13. makemenuconfig学习
  14. .NET Core通过过滤器和中间件两种方式实现全局异常捕获和日志记录
  15. scrapy 爬取前程无忧
  16. HibernateTemplate的用法以及作用
  17. 使用livereload实现自动刷新
  18. Linux系统资源查看 之 资源信息
  19. java学习(五)Number类、Math类
  20. 开源ETL工具kettle系列之常见问题

热门文章

  1. JUC包-原子类(AtomicInteger为例)
  2. linux seccomp使用和原理
  3. go语言中运算符
  4. #2020征文-开发板# 用鸿蒙开发AI应用(二)系统篇
  5. 在mapper.xml映射文件中添加中文注释报错
  6. 通过实例学习 PyTorch
  7. vue 深度作用选择器
  8. 【MyBatis】MyBatis 延迟加载策略
  9. 大数相加Java
  10. IDEA一步步创建Maven管理的Spring入门程序