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

验证

相关推荐
ZzzZZzzzZZZzzzz…1 小时前
K8s---组件
运维·云原生·容器·kubernetes·k8s·k8s组件
行业研究员1 小时前
云原生数据库推荐排行与选型
数据库·云原生·云原生库
陈皮糖..1 小时前
基于 Kubernetes 与 GitLab CI/CD 的云原生自动化交付平台
运维·ci/cd·云原生·架构·kubernetes·自动化·gitlab
gs801402 小时前
Docker Desktop 报 Wsl/CommandTimedOut、wsl -l -v 卡死、0x80080005 的完整排查与解决
运维·docker·容器
分布式存储与RustFS2 小时前
把 RustFS 当 ClickHouse 的 S3 存储盘:冷热分层落对象存储
云原生·开源·对象存储·分布式存储·s3·rustfs·性能基准
cui_hao_nan2 小时前
Kubernetes 核心概念总结
云原生·容器·kubernetes
芷栀夏2 小时前
开源菜谱工具 cook 实践:按食材筛选菜谱、随机推荐,并用 Docker 部署到本地
docker·容器·开源
张洛闻Eren2 小时前
云原生k8s【第八课】: ETCD 备份与恢复
linux·运维·docker·kubernetes·k8s
IT大白鼠11 小时前
Ingress 与 Ingress-Controller:K8s 七层 HTTP 反向代理技术详解与实践
http·容器·kubernetes