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

删除命名空间使用

相关推荐
华一精品Adreamer1 小时前
纯Linux笔记本好用吗?和Windows比有什么优劣?
linux·电脑
小冷爱学习!1 小时前
Apache Shiro 1.2.4 反序列化漏洞Shiro-550(CVE-2016-4437)
服务器·网络·python·安全·网络安全·apache
|_⊙1 小时前
Linux 进程知识扩展(下)
linux·运维·服务器
计算机安禾1 小时前
【计算机网络】第27篇:高并发服务端的网络架构设计——从Reactor模式到协程调度
网络·计算机网络
思麟呀1 小时前
初始MySQL数据库
服务器·数据库·mysql
计算机安禾1 小时前
【计算机网络】第23篇:Wireshark抓包分析的方法论——过滤表达式、跟踪流与统计工具
网络·计算机网络·wireshark
xiaoye-duck1 小时前
《Linux系统编程》Linux指令收尾 (四):从零开始理解Linux基础指令
linux
IMPYLH2 小时前
Linux 的 tsort 命令
linux·运维·服务器·bash
The Straggling Crow2 小时前
Linux foundation + PXE 2026-05-08
linux·运维·服务器