当前位置:网站首页>kubernetes资源对象介绍及常用命令(三)
kubernetes资源对象介绍及常用命令(三)
2022-07-01 23:31:00 【江小南】
Service
将一组Pods公开为网络服务的抽象方法。也可以理解为Pod的服务发现与负载均衡。
服务发现与负载均衡:Service会检测pod的状态,流量只会较为平均得分发到正常的pod中。

创建Service
暴露Deploy。端口8000。
命令行方式
[[email protected] ~]# kubectl expose deployment my-app --port=8000 --target-port=80
service/my-app exposed
[[email protected] ~]# kubectl get service
yaml方式,service.yml
apiVersion: v1
kind: Service
metadata:
labels:
app: my-app
name: my-app
spec:
selector:
app: my-app
ports:
- port: 8000
protocol: TCP
targetPort: 80
[[email protected] ~]# kubectl apply -f service.yml
service/my-app created
[[email protected] ~]#
查看Service
[[email protected] ~]# kubectl get service -n default
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 23h
my-app ClusterIP 10.96.2.98 <none> 8000/TCP 6s
[[email protected] ~]#
可以看到我们上面创建的Service的ip为10.96.2.98
。
[[email protected] ~]# curl 10.96.2.98:8000
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
...
</html>
[[email protected] ~]#
注意:我们这里可以使用ip:8000
的形式在集群内的任意节点访问。我们也可以在pod内使用域名:端口
的形式访问。域名的形式:service名称.命名空间.svc:端口。例如:my-app.default.svc:8000
。
扩展:
查看pod标签
[[email protected] ~]# kubectl get pod [podname] --show-labels
NAME READY STATUS RESTARTS AGE LABELS
my-app-5ff664f457-l7792 1/1 Running 1 20h app=my-app,pod-template-hash=5ff664f457
my-app-5ff664f457-r69z5 1/1 Running 1 20h app=my-app,pod-template-hash=5ff664f457
my-app-5ff664f457-w2d6q 1/1 Running 1 20h app=my-app,pod-template-hash=5ff664f457
my-app-5ff664f457-xsz9l 1/1 Running 1 20h app=my-app,pod-template-hash=5ff664f457
[[email protected] ~]#
使用标签检索Pod
[[email protected] ~]# kubectl get pod -l app=my-app
NAME READY STATUS RESTARTS AGE
my-app-5ff664f457-l7792 1/1 Running 1 20h
my-app-5ff664f457-r69z5 1/1 Running 1 20h
my-app-5ff664f457-w2d6q 1/1 Running 1 20h
my-app-5ff664f457-xsz9l 1/1 Running 1 20h
[[email protected] ~]#
删除Service
[[email protected] ~]# kubectl delete service my-app
service "my-app" deleted
[[email protected] ~]#
ClusterIP

我们上面方式创建Service默认使用的是ClusterIP,称为集群ip,只能在集群内部使用。等同于:
kubectl expose deployment my-app --port=8000 --target-port=80 --type=ClusterIP
apiVersion: v1
kind: Service
metadata:
labels:
app: my-app
name: my-app
spec:
ports:
- port: 8000
protocol: TCP
targetPort: 80
selector:
app: my-app
type: ClusterIP
NodePort

这种方式创建的Service在集群外也可以访问。因为他会在每个pod上映射一个新的端口。
命令行方式
[[email protected] ~]# kubectl expose deploy my-app --port=8000 --target-port=80 --type=NodePort
service/my-app exposed
[[email protected] ~]#
yaml方式。service.yml
apiVersion: v1
kind: Service
metadata:
labels:
app: my-app
name: my-app
spec:
ports:
- port: 8000
protocol: TCP
targetPort: 80
selector:
app: my-app
type: NodePort
kubectl apply -f service.yml
[[email protected] ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 25h
my-app NodePort 10.96.198.191 <none> 8000:32047/TCP 39s
[[email protected] ~]#
对比发现在PORT(S)中多了一个映射端口32047,这个端口在每个节点上都有,可以通过节点ip:30247
的方式在集群外进行访问。

NodePort除了可以在集群外访问以外,其余和ClusterIP一致。
小结
NodePort范围在 30000-32767 之间随机生成。 ClusterIP只能在集群内使用。 NodePort可以通过 节点ip:新端口
的方式在集群外访问。无论是ClusterIP还是NodePort,都会生成 CLUSTER-IP
,可在集群内使用。使用 ip:端口
要在集群节点上使用,而域名:端口
要在pod内使用。域名的写法:服务名.所在名称空间.svc
边栏推荐
- Matplotlib常用設置
- Redis RDB快照
- Notblank and notempty
- Notes to problems - file /usr/share/mysql/charsets/readme from install of mysql-server-5.1.73-1 glibc23.x86_ 64 c
- Leetcode(34)——在排序数组中查找元素的第一个和最后一个位置
- 【无标题】
- Redis 主从同步
- Know --matplotlib
- Which securities company is better and which is safer to open a securities account
- Oracle中已定义者身份执行函数AUTHID DEFINER与Postgresql行为的异同
猜你喜欢
【必会】BM41 输出二叉树的右视图【中等+】
notBlank 和 notEmpty
安全协议重点
ConcurrentSkipListMap——跳表原理
物联网技术应用属于什么专业分类
Yunxin small class | common cognitive misunderstandings in IM and audio and video
The best smart home open source system in 2022: introduction to Alexa, home assistant and homekit ecosystem
SWT / anr problem - SWT causes kernel fuse deadlock
Glass mosaic
Redis AOF日志
随机推荐
共享电商的背后: 共创、共生、共享、共富,共赢的共富精神
SQL optimization
Typescript enumeration
2022 examination questions and online simulation examination for safety management personnel of hazardous chemical business units
STM32F030F4驱动TIM1637数码管芯片
Material Design组件 - 使用BottomSheet展现扩展内容(一)
How to display real-time 2D map after rviz is opened
每日三题 6.28
Who do you want to know when opening a stock account? Is it safe to open an account online?
每日三题 6.29
Redis data types and application scenarios
Leetcode(34)——在排序数组中查找元素的第一个和最后一个位置
上海炒股开户选择手机办理安全吗?
【ES实战】ES上的安全性运行方式
Redis RDB快照
Redis RDB snapshot
Practical application and extension of plain framework
Leetcode (34) -- find the first and last positions of elements in a sorted array
每日三题 6.30(2)
Daily three questions 6.29