ingress service配置解析

externalTrafficPolicy: Local

含义

externalTrafficPolicy: Local 表示来自集群外部的流量只会被路由到运行有服务后端 Pod 的节点上。

工作原理

  1. 当外部请求到达某个节点的 NodePort 时:

    • 如果该节点上有服务对应的 Pod 在运行,请求会被转发到本地的 Pod

    • 如果该节点上没有服务对应的 Pod,请求会被丢弃(返回 TCP RST)

  2. 特点:

    • 保留原始客户端 IP(不会做 SNAT)

    • 可能导致流量分布不均(只有有 Pod 的节点才会接收流量)

    • 适合需要保留客户端源 IP 的场景

internalTrafficPolicy: Cluster

含义

internalTrafficPolicy: Cluster 表示来自集群内部的流量会被均匀分配到所有可用的后端 Pod,无论这些 Pod 运行在哪个节点上。

工作原理

  1. 当集群内部的服务请求发生时:

    • 请求会被均匀分配到所有健康的 Pod

    • 不考虑 Pod 所在的节点位置

  2. 特点:

    • 提供更好的负载均衡

    • 可能导致跨节点流量(pod 在节点 A,请求来自节点 B)

    • 默认行为

验证-LoadBalancer模式

修改ARP模式,启用严格ARP模式

kubectl get configmap kube-proxy -n kube-system -o yaml | \
sed -e "s/strictARP: false/strictARP: true/" | \
kubectl apply -f - -n kube-system

#查看修改结果

kubectl edit configmap -n kube-system kube-proxy

搭建metallb支持LoadBalancer

Metallb 在 Kubernetes 中的作用主要是为没有运行在如 AWS、GCP 等具有完善网络服务的云平台上的集群,提供网络负载均衡器的实现。

  • 实现 LoadBalancer 服务类型:在 Kubernetes 中,Service 有多种类型,其中 LoadBalancer 类型通常需要外部的负载均衡器支持。Metallb 可以在缺乏原生云平台负载均衡支持的环境下,模拟实现 LoadBalancer 类型的 Service。它能够为应用提供可从集群外部访问的固定 IP 地址。

  • IP 地址分配与管理:负责在指定的 IP 地址范围(IP address pool)内,为 LoadBalancer 类型的 Service 分配 IP 地址,并确保这些 IP 地址的正确映射和管理,使外部流量能够准确地路由到相应的 Kubernetes 服务后端 Pod。

  • 提供高可用的网络连接:通过实现 BGP(Border Gateway Protocol)或 Layer2 模式的负载均衡机制,确保即使在节点故障或网络波动的情况下,也能维持应用的外部网络连接的稳定性和可靠性。

配置环境

拉取压缩包并解压:unzip metallb-0.14.8.zip

for i in node{1,2}; do scp metallb-0.14.tar k8s-$i:/root;done

给本地 Kubernetes 安装「LoadBalancer 功能」:docker load -i metallb-0.14.tar

进入目录cd /root/ingress/metallb-0.14.8/config/manifests

创建命名空间kubectl create -f metallb-native.yaml

创建目录:mkdir ippool cd ippool
给 MetalLB 设置一个 "IP 地址池":

cat > IPAddressPool.yaml<<EOF

apiVersion: metallb.io/v1beta1

kind: IPAddressPool

metadata:

name: planip-pool #这里与下面的L2Advertisement的ip池名称需要一样

namespace: metallb-system

spec:

addresses:

  • 192.168.11.170-192.168.11.200 #自定义ip段

EOF
关联IP地址池:

cat >L2Advertisement.yaml<<EOF

apiVersion: metallb.io/v1beta1

kind: L2Advertisement

metadata:

name: planip-pool

namespace: metallb-system

spec:

ipAddressPools:

  • planip-pool #这里需要跟上面ip池的名称保持一致

EOF

创建:kubectl create -f ./

打开并修改 Nginx 网关的「外网访问方式」:

kubectl -n ingress-nginx edit svc ingress-nginx-controller

验证

vim svc.yml

vim dv1.yaml

kubectl create -f svc.yml

kubectl create -f dv1.yaml

kubectl get svc

删除命名空间使用

相关推荐
随便做点啥2 分钟前
32卡×4090 24GB,Qwen3.8-27B-FP8 集群部署报告
服务器·经验分享·docker·vllm
Brilliantwxx11 分钟前
313131
服务器
迪康coolmu24 分钟前
企业文件外发防泄漏实践:从通道封堵到三层全链路管控
大数据·运维·网络·人工智能·安全·阿里云
星恒讯工业路由器8 小时前
新一代通信网:从“连接万物”到“智联万物”的关键跃迁
网络·物联网·智能路由器·工业路由器·工业物联网·5g-a·新一代通信网
comedate8 小时前
Windows / Linux GPU 虚拟内存布局差异与 CUDA 越界访问行为
linux·windows·mmu·cuda 越界访问
暴力求解10 小时前
Linux网络---传输层协议TCP(二)
linux·服务器·开发语言·网络·tcp/ip
石头猫灯10 小时前
WordPress wp2shell 漏洞链完整拆解流程
网络·数据结构·安全·web安全
网安蟹佬霸10 小时前
OSINT开源情报收集实战:从信息搜集到资产测绘(2026最新万字保姆级指南)
前端·网络·安全·web安全·网络安全·开源
ltl11 小时前
序列化格式深度对比:Protobuf、FlatBuffers、Cap’n Proto
linux
lengjingzju11 小时前
编译与调试完全指南—第17章 总结
linux