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

删除命名空间使用

相关推荐
星恒讯工业路由器4 小时前
AGV集群通信架构:从单点到百台级调度的挑战与对策
网络·物联网·信息与通信·工业物联网·通信架构·agv集群·实时调度
tg_xianheyun5 小时前
CDN节点分布如何影响网页加载速度和用户体验
服务器·cdn加速·全球访问优化
夜月yeyue5 小时前
AUTOSAR CP 从上电到 Runnable
c语言·网络·tcp/ip·车载系统
lsh曙光6 小时前
延时at指令和定时cron指令
linux·服务器·网络
treesforest6 小时前
IP定位技术在网络犯罪侦查中的应用与价值
网络·网络协议·tcp/ip·网络安全·ip归属地查询·反欺诈
圆山猫6 小时前
[Virtualization](四):Linux KVM/RISC-V 的 vCPU 运行路径
java·linux·risc-v
XR1234567886 小时前
企业全光网络架构选型技术白皮书:从物理层到运维层的全链路分析
运维·网络·架构
似的8356 小时前
一步一步学习使用FireMonkey动画() 使用TAnimator类创建动画
linux·学习·nginx
萧瑟余晖7 小时前
Java深入解析篇九之NIO详解
java·网络·nio
夏殇之殁8 小时前
包中创建自定义列表项。 . 使用自定义列表项进行数据绑定 . 将天气预报数据保存到本地内存表,通过LiveBindings进行显示。 ...
服务器·前端·javascript