|NO.Z.00161|——————————|CloudNative|——|KuberNetes&服务发布.V12|——|service.v04|service常用类型|
一、service常用类型:service类型一:ClusterIP:在集群内部使用,也是默认值。
### --- 类型一:ClusterIP:在集群内部使用,也是默认值。
~~~ 这个service的地址,在安装的时候不要和公司的网段去重复。
~~~ 还有Pod的网段是不建议去重复。
~~~ 这个service的地址是基于k8s集群内部去管理的,外部网络是不可以访问的。
~~~ 在node节点是可以访问的,pod也是可以访问的,但是k8s外部网络是不可以访问的。
[root@k8s-master01 ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 11d
二、service类型二:ExternalName:通过返回定义的CNAME别名。
### --- 类型二:ExternalName:通过返回定义的CNAME别名。
~~~ 在这个ExternalName定义了一个外部的域名,
~~~ 解析这个名称nginx-externalname就可以解析到ExternalName对应的dns记录。
~~~ 然后就可以访问到它了www.baidu.com
[root@k8s-master01 ~]# cat nginx-externalName.yaml
app: nginx-externalname
name: nginx-externalname
spec:
type: ExternalName
externalName: www.baidu.com
[root@k8s-master01 ~]# kubectl get svc
nginx-externalname ExternalName <none> www.baidu.com <none> 17m
三、service类型三:NodePort:kube-proxy的节点代理端口
### --- 类型三:NodePort:在所有安装了kube-proxy的节点上打开一个端口,此端口可以代理至后端Pod,
~~~ # 然后集群外部可以使用节点的IP地址和NodePort的端口号访问到集群Pod的服务。
~~~ # NodePort端口范围默认是30000-32767。
~~~ 这个dashboard在创建的时候会创建一个service,这个service的类型是NodePort,
~~~ 它会会做一个映射,就是在安装了kube-proxy的节点上都会启动一个端口;30000端口
~~~ 就是在宿主机上打开了一个端口,这个端口就可以到k8s内部的k8s-service,
~~~ 这样就可以通过任何一个宿主机的IP地址,加上端口号就可以访问到我们的服务。
~~~ 我们通过这个就可以访问到:https://192.168.1.20:30008/
~~~ 这个端口可以在apiserver的配置文件中查看到
### --- 查看svc对应的地址及端口
[root@k8s-master01 ~]# kubectl get svc -n kubernetes-dashboard
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
dashboard-metrics-scraper ClusterIP 10.103.18.41 <none> 8000/TCP 11d
kubernetes-dashboard NodePort 10.104.232.53 <none> 443:30008/TCP 11d
[root@k8s-master01 ~]# netstat -antp |grep 30008
tcp 0 0 0.0.0.0:30008 0.0.0.0:* LISTEN 19452/kube-proxy
### --- 查看kube-apiserver.service地址范围
~~~ 比如之前有一个service,只能在k8s内部去访问, 我们配置更改为外部网络也是可以访问
[root@k8s-master01 ~]# cat /usr/lib/systemd/system/kube-apiserver.service
--service-cluster-ip-range=10.96.0.0/12 \
--service-node-port-range=30000-32767 \ // 这个端口号也是可以更改的
### --- 查看service地址
~~~ 之前这个service只能在k8s内部去访问,我们可以更改它的类型。并设置为外部网络可以访问
[root@k8s-master01 ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-svc ClusterIP 10.101.145.83 <none> 80/TCP,443/TCP 20h
四、查看nginx-service配置参数
### --- 查看nginx-service配置参数
~~~ 我们可以通过31000可以访问到nginx:http://192.168.1.20:31000/:
~~~ 输出:Welcome to nginx!
[root@k8s-master01 ~]# kubectl edit svc nginx-svc
spec:
clusterIP: 10.101.145.83
clusterIPs:
- 10.101.145.83
ports:
- name: http
port: 80
protocol: TCP
targetPort: 80
nodePort: 31000 // 且为NodePort指定一个端口号,若是不指定,它会随机生成一个。
- name: https
port: 443
protocol: TCP
targetPort: 443
selector:
app: nginx
sessionAffinity: None
type: NodePort // 类型更改为NodePort,
[root@k8s-master01 ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-svc NodePort 10.101.145.83 <none> 80:31000/TCP,443:32765/TCP 20h
### --- 所以说NodePort也是可以访问到集群内部的一种方式:
~~~ # 使用场景:
~~~ 若是你在k8s内部部署了Redis或者mysql,一般情况下这些服务都不会暴露在外,
~~~ 因为在集群内部访问笔记安全,但是开发临时性的需要访问到集群内部的Redis或者mysql。
~~~ 这个时候可以通过临时性的创建一个NodePort,让它访问一次,访问完之后可以给他关掉。
~~~ 当然不建议给你的应用程序直接暴露一个端口号给别人去访问的。
~~~ IP地址+端口号:NodePort的性能是不怎么样的。
五、service类型四:LoadBalancer:使用云提供商的负载均衡器公开服务。
### --- 类型四:LoadBalancer:使用云提供商的负载均衡器公开服务。
~~~ 若是你在云服务上话是支持loadbalancer这个格式,把它的TYPE更改为loadbalancer,
~~~ 但是这种使用起来是有成本的。
~~~ 用的最多的是clusterIP
[root@k8s-master01 ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 11d
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了