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

删除命名空间使用

相关推荐
叶半欲缺7 小时前
软考-中级信息安全工程师全战备资源包介绍和分享
网络·web安全
似水এ᭄往昔7 小时前
【Linux网络编程】--计算机网络基础
linux·网络·计算机网络
qq_312920117 小时前
服务器被攻击!完整安全加固清单汇总
运维·服务器·安全
xlq223227 小时前
61 cookie session传输层
网络
XiaoLin laile7 小时前
【无标题】
网络·数据库·人工智能
leaves falling7 小时前
深入理解Linux进程控制:从fork到exec,手写一个迷你Shell
linux·运维·服务器
思麟呀7 小时前
C++工业级日志项目(七)日志器核心
linux·开发语言·c++·windows
2401_873479407 小时前
如何用IP离线库批量清洗订单IP,自动标注省市区?
开发语言·网络·python
满天星83035777 小时前
【Git】原理及使用(二) (版本回退)
linux·git
Strugglingler7 小时前
【Linux Device Drivers-第九章 与硬件通讯 I/O端口,I/O内存】
linux·i/o端口·i/o内存