20|Service:微服务架构的应对之道
为什么要有 Service
- 深入了解
- 翻译
- 解释
- 总结
Kubernetes中的Service对象在微服务架构中扮演着关键角色,实现了负载均衡和服务发现技术。本文详细介绍了Service的工作原理和使用方法,强调了其简单定义和与Pod的关联关系。通过创建ConfigMap和对Deployment的改造,展示了如何使用`kubectl apply`命令创建Service对象,并演示了Service的负载均衡效果和自动化服务发现。此外,文章还介绍了如何以域名方式使用Service,以及如何让Service对外暴露服务,特别是NodePort类型的Service。通过DNS域名和NodePort类型的Service,读者可以更方便地访问和管理后端服务。总的来说,本文通过清晰的语言和实际操作示例,帮助读者快速了解了Service在Kubernetes中的作用和使用方法,为微服务架构的实践提供了有益的指导。文章还提出了两个思考题,引发读者深入思考和讨论。通过本文,读者能够全面了解Service对象的重要性和应用价值,为其在实际应用中提供了指导和启发。
《Kubernetes 入门实战课》,新⼈⾸单¥59
全部留言(51)
- 最新
- 精选
- 西门吹牛Service 的 IP 是 vip,其实就是保证外部请求的ip不变,不会因为节点变动,而 ip 跟着动,和 lvs + nginx 部署高可用集群一样,主要保证高可用。方便。 负载均衡算法,Service 会用哪种呢? 轮询,加权轮询,随机,针对有状态的一致性hash,还有针对最少活跃调用数的。 最好的负载均衡是自适应负载均衡,可以动态的监控收集服务的状态,各种指标进行加权计算,从中选出个最合适的。 感觉,service 应该是自适应,都有能力自动编排了,对于一些服务状态的数据指标,收集应该问题不大
作者回复: 说的很好。 Service的负载均衡能力比较弱,只支持最简单的round-robin。
2022-08-05归属地:北京228 - 郑海成Q1: svc是基于内核的netfilter技术实现的,在用户态通过iptable和ipvs应用hook链和表,所以它的IP注定是虚拟的,至于静态考虑则是为暴露的服务提供相对稳定性能的dns解析 Q2: 负载均衡技术分为DNS、四层和七层,dns也是一种简单的负载均衡只是算法很简单随机;四层负载均衡主要有nat、IP隧道等,主要是做一些IP和端口的变换,算法也不多比如rr,七层负载均衡则是基于http header来做负载算法很多,可以做一些流量控制;其次还有在客户端做负载均衡比如nacos、istio等
作者回复: great
2022-08-08归属地:上海17 - dao前几节课多节点集群看起来一切正常,但本节的 dns 测试一直无法通过。周末搞了两天,最终发现是 virtualbox 两张网卡的坑。首先是集群节点的 kubelet 配置需要分别指定 `KUBELET_EXTRA_ARGS="--node-ip=192.168.56.x"`;然后时安装 flannel 需要指定 `--iface=enp0s3`,这张网卡应该时前面的 node-ip 对应的网卡。
作者回复: great,两张网卡确实会遇到一些问题,感谢经验分享。
2022-08-14归属地:北京515 - YueShi各位大佬们,如果有用虚拟机的,使用挂起再恢复的,建议每次遇到问题先重启虚拟机,踩了很多次这种挂起再恢复导致的网络问题的坑了
作者回复: 是的,Kubernetes感觉比较娇贵,不那么皮实,重启可以解决很多问题。
2022-08-05归属地:上海11 - ppd0705不知道有没有同样遇到 dns 无法解析域名的同学,重启coredns试试: kubectl -n kube-system rollout restart deployment coredns
作者回复: 有的时候这些pod会有问题,用describe或者logs看看,有问题就重启。
2022-08-06归属地:上海68 - 朱雯nginx负载均衡是可以设置策略的,权重之类的,svc和nodeport是怎么设置这方面的信息呢
作者回复: 因为Kubernetes是基础设施,高级的负载均衡策略属于应用层次,Kubernetes来做这个就属于越位了。
2022-08-18归属地:北京5 - zero不知道有没有同样遇到 dns 无法解析域名的同学,可能你不能访问的原因是你网络插件Flannel的问题,我自己的虚拟机双网卡,需要在kube-flannel.yml上面指定你的网卡 args: - --ip-masq - --kube-subnet-mgr - --iface=enp0s3 // 这里替换成自己的网卡
作者回复: great! 我的电脑是m1的,对virtualbox用的不多,可能有的问题没有遇到,感谢经验分享。
2023-01-08归属地:北京24 - 龙之大者进入pod后,如果curl ngx-svc出现Could not resolve hostnames报错,可以重启coredns deployment kubectl -n kube-system rollout restart deployment coredns https://stackoverflow.com/questions/45805483/kubernetes-pods-cant-resolve-hostnames
作者回复: 是的,Kubernetes里的组件也不会总是运行正常的,发现有问题就可以简单地重启解决。
2022-08-24归属地:北京54 - 大毛对于使用 virtualBox 搭建环境,无法使用 DNS 和 exec 进入容器内部的同学,这里有我解决问题的方法,可以尝试参考一下。 问题的原因是,virtualBox 给每个虚拟机默认一个 NAT 的网口,这个网口的 IP 是 virtualBox 自动分配的,且所有的地址都是 10.0.2.15,这个所有节点都相同的 IP 显然会对 kubernetes 造成困扰。解决问题的办法很简单,只要指定 kubelet 使用其他网口即可(网口通常使用的是 192.168 开头的你的路由器的 IP),具体方法是在 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf(我使用的是 ubuntu 系统,其他系统可能是其他路径)文件中添加如下代码 Environment="KUBELET_EXTRA_ARGS=--node-ip=xxx.xxx.xxx.xxx" ,其中 xxx 就是你虚拟机分配的 IP 地址。修改完成后使用 sudo systemctl daemon-reload 和 sudo systemctl restart kubelet.service 重启 kubelet。然后使用 kubectl get nodes -o wide 查看节点的 IP 是否变更 通常到这里问题就可以解决了,如果你发现依然有问题(使用 kubectl get pod -n kube-system -o wide 看是否有 pod 没有 running),可能要重新安装 flannel 插件。具体情况请问 GPT。
作者回复: awesome!
2023-06-12归属地:北京23 - alexgreenbarNodePort 设置后,得注意可以通过curl集群的节点来访问服务,但这里面不包括master节点
作者回复: 一般master节点不会调度运行Pod,如果去掉污点就可以了,可以参考一下DaemonSet。
2022-09-26归属地:北京53