云原生:kubernetes的service

一、service核心

  1. Service 是 K8s 四层负载均衡,依靠 Label 标签选择 Pod,Endpoint 保存后端 Pod 真实 IP 端口。标签不匹配则无 Endpoint,服务不通。
  2. kube‑proxy 两种转发模式:iptables (默认)、ipvs (LVS 高性能,大规模集群推荐)。
  3. Service 四种类型:
    • ClusterIP:集群内部访问;Headless 无头服务clusterIP:NoneDNS 直接返回 PodIP,用于 StatefulSet。
    • NodePort:所有节点开启端口对外访问,端口区间默认 30000‑32767。
    • LoadBalancer:外部负载均衡,自建集群依赖 MetalLB 组件分配外部 IP。
    • ExternalName:DNS 别名指向外部域名,无代理。

二、ingress核心

  1. Service 四层,Ingress 七层(HTTP/HTTPS);Ingress 资源是配置,Ingress‑Nginx‑Controller 才是真正 Nginx 代理 Pod。
  2. Ingress 支持:路径路由、域名虚拟主机、TLS 证书加密、http 强制跳转 https、URL 重写、BasicAuth 账号密码认证。
  3. Canary 金丝雀灰度:两种策略:Header 头匹配灰度、流量权重百分比灰度,新版本小流量验证,降低发布风险。

企业选型建议

  1. 集群内部服务调用:ClusterIP。
  2. 有状态应用 StatefulSet:Headless Service。
  3. Web 业务对外发布:优先 Ingress‑Nginx(七层)。
  4. 自建裸金属 K8s 需要 LoadBalancer:部署 MetalLB。
  5. 大规模集群 kube‑proxy 开启 ipvs 模式,提升转发性能。
  6. NodePort 仅用于测试,生产环境尽量不要直接使用。

三、理解标签与service中的endpoint

1.建立一个service

watch -n 1 "kubectl describe svc testservice ; kubectl get pods --show-labels " 监控

监控可以看到endpoints为空,说明没有被暴露的业务

2.建立pod并测试pod是否可以被testservice暴漏

监控处没有被暴露的业务

更改标签后访问服务ip,发现业务被暴露

监控处显示endpoints的ip

四、利用service暴露控制器

watch -n 1 "kubectl describe svc webservice ; kubectl get deploy --show-labels;kubectl get pods -o wide --show-labels " 监控

1.生成控制器和service的组合yaml

2.控制器和service信息

访问测试

自动负载均衡

五、service的ipvs模式

kube‑proxy 把 Service 的 ClusterIP/NodePort 转换成内核转发规则,拦截访问 Service 的流量,调度转发到后端 Endpoints (Pod)

1.在所有节点安装ipvsadm工具

2.配置集群中的kubu-proxy

效果

六、service的clusterIP类型

1.clusterip(默认)

vip模式访问此ip可以进行调度

2.在k8s集群内部解析

集群内部通常使用service的解析名称进行通信地址的指定,因为资源的ip会变但是名字不会

3.clusterIP的headless模式

当设定此模式,那么service不会被分配一个ip而是直接把endpoints上的ip直接通过dns裸漏

七、service的nodeport模式

在每个集群节点上开放一个物理端口(30000‑32767 默认范围)。访问任意节点IP:NodePort端口,流量转发给 Service 后端 Pod

测略查看

访问

八、loadbalancer模式

在 NodePort 基础之上,对接外部负载均衡器,分配独立外部 IP

1.建立service

2.构建metalLB

上传镜像

更改kube-proxy

更改metallb的配置文件

重新开启loadbalancer服务看是否有ip

九、extrnalname

不代理、没有端点,只是 DNS CNAME 别名,把集群内部 Service 解析映射到外部域名。

十、ingress七层代理

1.ingress部署

下载deploy文件

准备ingress所需镜像

更改deploy.yaml

通过deploy.yaml部署ingress

2.ingress功能的基本实现

建立ingress代理的微服务

建立ingress

测试

3.基于域名的访问

测试

4.基于动静分离的方式

测试

5.tls加密访问

测试

6.auth认证

安装生成认证文件模具的工具

生成认证文件

将认证文件注入k8s中

在ingress中配置auth认证

验证

相关推荐
方便面不加香菜2 小时前
Docker Volume -- 管理卷Volume详解
运维·docker·容器
江湖有缘3 小时前
Docker实战 | 使用Docker部署lemonitor镜像站点列表程序
运维·docker·容器
莫晓燚3 小时前
mall 电商项目完整部署---实战
linux·运维·docker·容器
我是koten9 小时前
【运维杂谈】K8s遇到Terminating的名称空间删除不了怎么办?(解决方案亲测有效)
linux·运维·服务器·云原生·kubernetes·k8s·名称空间
RuoyiOffice16 小时前
KubeSphere 容器云实践:从管理 K8s 到建设企业 PaaS,还需要哪些能力
spring boot·kubernetes·kubesphere·jenkins·paas·微服务部署·ruoyi office
风吹稻子17 小时前
etcd备份与恢复:删了 etcd.yaml,容器为什么还在跑?——一次 K8s 控制面死锁排查实录
kubernetes
weirong20 小时前
Operator 的测试该写到哪一层?139 个用例之后我划的三条线
kubernetes
阿里云云原生20 小时前
稳定复现超 70% 的缺陷,报警到自动修复的 Agent 流水线实践
云原生
阿里云云原生21 小时前
从“自证清白”到“因果链条”:智能体如何重塑运维排障效率
云原生
阿里云云原生1 天前
TechTalk丨从能买奶茶到能进企业,Agent 绕不开同一组问题
云原生·agent