登山则情满于山,观海则意溢于海。这篇文章主要讲述#云原生征文#深入了解Kubernetes(k8s)Service相关的知识,希望能为你提供帮助。
深入了解Kubernetes(k8s)Service一、基础概念将运行在一组 Pods 上的应用程序公开为网络服务的抽象方法。
1、创建简单Service
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: MyApp ## 使用选择器选择所有Pod
# type: ClusterIP ##type很重要,不写默认是ClusterIP
ports:
- protocol: TCP
port: 80
targetPort: 9376
2、创建无Selector的Service
# 无selector的svc
apiVersion: v1
kind: Service
metadata:
name: my-service-no-selector
spec:
ports:
- protocol: TCP
name: http ###一定注意,name可以不写,
###但是这里如果写了name,那么endpoint里面的ports必须有同名name才能绑定
port: 80 # service 80
targetPort: 80 #目标80
---
apiVersion: v1
kind: Endpoints
metadata:
name: my-service-no-selector ### ep和svc的绑定规则是:和svc同名同名称空间,port同名 或同端口
namespace: default
subsets:
- addresses:
- ip: 220.181.38.148
- ip: 39.156.69.79
- ip: 192.168.169.165
ports:
- port: 80
name: http ## svc有name这里一定要有
protocol: TCP
## 实验
apiVersion: v1
kind: Service
metadata:
name: cluster-service-no-selector
namespace: default
spec:
## 不选中Pod而在下面手动定义可以访问的EndPoint
type: ClusterIP
ports:
- name: abc
port: 80 ## 访问当前service 的 80
targetPort: 80 ## 派发到Pod的 80
---
apiVersion: v1
kind: Endpoints
metadata:
name: cluster-service-no-selector ## 和service同名
namespace: default
subsets:
- addresses:
- ip: 192.168.169.184
- ip: 192.168.169.165
- ip: 39.156.69.79
ports:
- name: abc ## ep和service要是一样的
port: 80
protocol: TCP
场景:Pod要访问 MySQL。 MySQL单独部署到很多机器,每次记ip麻烦### 集群内创建一个Service,实时的可以剔除EP信息。反向代理集群外的东西。
二、ClusterIP
type: ClusterIP
ClusterIP: 手动指定/None/""
三、NodePortapiVersion: v1
kind: Service
metadata:
name: my-service
namespace: default
type: NodePort
ports:
- protocol: TCP
port: 80 # service 80
targetPort: 80 #目标80
nodePort: 32123 #自定义
四、ExternalNameapiVersion: v1
kind: Service
metadata:
name: my-service-05
namespace: default
spec:
type: ExternalName
externalName: baidu.com
五、LoadBalancerapiVersion: v1
kind: Service
metadata:
creationTimestamp: null
labels:
app.kubernetes.io/name: load-balancer-example
name: my-service
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app.kubernetes.io/name: load-balancer-example
type: LoadBalancer
六、扩展 - externalIP在 Service 的定义中, externalIPs 可以和任何类型的 .spec.type 一通使用。在下面的例子中,客户端可通过 80.11.12.10:80 (externalIP:port) 访问 my-service
apiVersion: v1
kind: Service
metadata:
name: my-service-externalip
spec:
selector:
app: canary-nginx
ports:
- name: http
protocol: TCP
port: 80
targetPort: 80
externalIPs: ### 定义只有externalIPs指定的地址才可以访问这个service
- 10.170.0.111
七、扩展 - Pod的DNSapiVersion: v1
kind: Service
metadata:
name: default-subdomain
spec:
selector:
name: busybox
clusterIP: None
ports:
- name: foo # 实际上不需要指定端口号
port: 1234
targetPort: 1234
---
apiVersion: v1
kind: Pod
metadata:
name: busybox1
labels:
name: busybox
spec:
hostname: busybox-1
subdomain: default-subdomain
## 指定必须和svc名称一样,才可以 podName.subdomain.名称空间.svc.cluster.local访问。否 则访问不同指定Pod
containers:
- image: busybox:1.28
command:
- sleep
- "3600"
name: busybox
---
apiVersion: v1
kind: Pod
metadata:
name: busybox2
labels:
name: busybox
spec:
hostname: busybox-2
subdomain: default-subdomain
containers:
- image: busybox:1.28
command:
- sleep
- "3600"
name: busybox
同名称空间
ping service-name 即可
不同名称空间
ping service-name.namespace 即可
同名称空间
ping pod-host-name.service-name 即可
不同名称空间
ping pod-host-name.service-name.namespace 即可
【#云原生征文#深入了解Kubernetes(k8s)Service】?【本文正在参加云原生有奖征文活动】,活动链接:https://ost.51cto.com/posts/12598
推荐阅读
- 机器学习总结笔记
- python打印print打印语句当中的f是什么
- Containerd容器运行时(yum安装与二进制安装,哪个更适合你())
- selenium强制等待,隐式等待,显式等待
- client-go gin的简单整合十-Update
- 测试Charles的map,rewrite,breakpoints的使用方法
- HTTPHTTP请求体中的四种格式,requests库发送post请求
- pythonprint和pprint的区别
- adbAndriod获取常用性能指标的方法