【Kubernetes】通过名称访问 Service
环境
- kubernetes 1.20.2
- Spring Boot 2.5.0-M1
目标
之前,我们看到通过 Service 名称组合而成的环境变量访问的问题。通过名称访问应该是较好的方式,
但是怎么解决动态更新的问题?那就是使用 DNS。
测试名称访问
查看当前 Pod
[root@master ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
rc-demo-46dq7 1/1 Running 0 61m 10.244.1.113 node1 <none> <none>
rc-demo-dxvlv 1/1 Running 0 61m 10.244.1.111 node1 <none> <none>
rc-demo-j48b8 1/1 Running 0 61m 10.244.1.112 node1 <none> <none>
测试连通性
[root@master kubernetes]# kubectl exec -it rc-demo-j48b8 -- sh
/ # ping svc-pg
PING svc-pg (10.108.222.50): 56 data bytes
64 bytes from 10.108.222.50: seq=0 ttl=64 time=0.202 ms
64 bytes from 10.108.222.50: seq=1 ttl=64 time=0.134 ms
64 bytes from 10.108.222.50: seq=2 ttl=64 time=0.590 ms
64 bytes from 10.108.222.50: seq=3 ttl=64 time=0.146 ms
^C
--- svc-pg ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 0.134/0.268/0.590 ms
/ #
查看 DNS 解析
dnsutils
[root@master kubernetes]# kubectl run dnsutils --image=tutum/dnsutils --command -- sleep infinity
pod/dnsutils created
nslookup
[root@master kubernetes]# kubectl exec -it dnsutils -- bash
root@dnsutils:/# nslookup svc-pg
Server: 10.96.0.10
Address: 10.96.0.10#53
Name: svc-pg.default.svc.cluster.local
Address: 10.108.222.50
root@dnsutils:/# exit
exit
[root@master kubernetes]# kubectl get service svc-pg
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
svc-pg ClusterIP 10.108.222.50 <none> 5432/TCP 138m
通过对比,发现通过服务名得到的 IP 地址和 Service 一样的。
修改 Service
删除 svc-pg
[root@master kubernetes]# kubectl delete service svc-pg
service "svc-pg" deleted
新建 svc-pg
apiVersion: v1
kind: Service
metadata:
name: svc-pg
spec:
ports:
- port: 5432
查看 Service 信息
[root@master kubernetes]# kubectl describe service svc-pg
Name: svc-pg
Namespace: default
Labels: <none>
Annotations: <none>
Selector: <none>
Type: ClusterIP
IP Families: <none>
IP: 10.108.243.92
IPs: 10.108.243.92
Port: <unset> 5432/TCP
TargetPort: 5432/TCP
Endpoints: <none>
Session Affinity: None
Events: <none>
验证
可以看到 DNS 的记录信息也同步更新了。
[root@master kubernetes]# kubectl exec -it dnsutils -- bash
root@dnsutils:/# nslookup svc-pg
Server: 10.96.0.10
Address: 10.96.0.10#53
Name: svc-pg.default.svc.cluster.local
Address: 10.108.243.92
总结
介绍了通过服务名访问的方式,这是 k8s 推荐的方式,也是最方便的一种方式。
不过有个小问题,端口号还需要自己指定,所以建议端口一般使用默认,就不需要指定了。
附录
分类:
Kubernetes
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!