云原生: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认证

验证

相关推荐
分布式存储与RustFS5 分钟前
RustFS 该跟 stable 还是 nightly?两条版本线的分工、风险与回退,一张表说清
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
草莓熊Lotso1 小时前
【C++ 基于微服务的即时通讯系统】Elasticsearch 从安装到 C++ 客户端二次封装全落地
linux·网络·数据库·c++·elasticsearch·微服务
ggaofeng2 小时前
k8s中的dns
云原生·容器·kubernetes
银河技术3 小时前
从脚本到 Operator:用 Go 构建可靠的微服务自动扩缩容控制器
开发语言·微服务·golang
草莓熊Lotso5 小时前
【C++ 基于微服务的即时通讯系统】etcd + brpc 从安装到服务注册发现全链路实战
网络·数据库·c++·redis·微服务·etcd
我不会起名字32212 小时前
K8s Ingress 返回 502 但后端日志正常:4 类上游断连与排查链
kubernetes·k8s·ingress·502·keepalive
姜鱼问生15 小时前
每次开机手动检查 6 样东西?我写了个 2 秒自检脚本
运维·网络·nginx·docker·容器
wangqiaowq15 小时前
PostgresSQL server Docker 安装部署
运维·docker·容器
程序员阿明16 小时前
docker搭建视频流服务go2rtc,webRTC
docker·容器·webrtc
JavaPub-rodert17 小时前
Docker 容器为什么 stop 半天停不下来?讲透 PID 1、SIGTERM、SIGKILL、僵尸进程与 tini
运维·docker·容器