Kubernetes --(k8s) service
2024-08-31 17:56:47
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
其中:
- 通过DNS名称访问,只能在同一名称空间
- 如果不是同一名称空间,需要指定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暴露端口的四种方式:
- clusterIP
- NodePort
- LoadBalance
- ExternalName
最新文章
- 高性能的JavaScript--加载和执行
- VB.Net 2010中 ./和../的含义
- NLP情感分析监督学习样本打标
- phonegap 2.7 ios配置安装详细教程(2.9通用)
- 基于FFmpeg和Qt的播放器 QtAV库
- JZ2440开发笔记(4)——设置静态IP
- 24种设计模式--状态模式【State Pattern】
- Effective Java实作类别 - 就是爱Java
- title:EL表达式获取Map里面的数值失败的问题
- ROJ 1166 超级贞鱼
- AI 系列 总目录
- hdu 5130(2014广州 圆与多边形相交模板)
- makemenuconfig学习
- .NET Core通过过滤器和中间件两种方式实现全局异常捕获和日志记录
- scrapy 爬取前程无忧
- HibernateTemplate的用法以及作用
- 使用livereload实现自动刷新
- Linux系统资源查看 之 资源信息
- java学习(五)Number类、Math类
- 开源ETL工具kettle系列之常见问题