externalTrafficPolicy 再探

一   externalTrafficPolicy 属性再探

一次网络不通"争吵"引发的思考

K8s中的external-traffic-policy是什么?

说明: 阿里云的 'EDAS 和ACK'的默认行为'不一样'  eg:EDAS创建的'cm'不会同步到ACK

Kubernetes(二十三)Service(二)会话保持和获取客户端的ip

访问 externalTrafficPolicy 为 Local 的 Service 对应 LB 有时超时

k8s svc的externalTrafficPolicy属性 跨node不通 保留客户端源IP

kubernetes svc设置externalTrafficPolicy无法访问题

现象: 在'没有对应pod'所落的worker节点上,通过'svc'访问'该pod'报错'Connected Refuse'

备注: 但是直接访问'pod'是通的

原因: 因为节点上'没有'相关的'ipvs转发规则',所以'无法'进行dnat,访问会'失败'

说明: 常见有'两种'行为

备注:

 1、当externalTrafficPolicy取值为'Local'时

 2、通过'节点IP:服务端口'的请求只会转发给'本节点上的Pod',如果节点'没有Pod'话请求会'挂起'

观察点: '没有' endpoint的节点的 'SLB IP' 的IPVS 的'规则'  --> SLB的'规则'后端节点

引申: 'ECMP'等价路由、提供服务的'集群节点有差异 [没有健康检查]'等

+++++++++++  "分割线"  +++++++++++

现象: 通过k8s的'svc提供的域名 或CLuster IP',竟然'时通时不通' --> '两个实例'

补充: pod内访问'Service'地址偶现不通

原因: net.bridge.bridge-nf-call-iptables = 0 '导致'

k8s 中为什么要开启bridge-nf-call-iptables      k8s安装和配置先决条件有该内核参数讲解

kubernetes - "externalTrafficPolicy"设置为 "Local"时'无响应'导致超时、或者'连接拒绝'

集群内无法访问Service的说明

抓包分析当svc externalTrafficPolicy=Local 时,进入容器中的包是否进行源地址转换

①  Local值和Cluster值的差异性

kubectl explain svc.spec.externalTrafficPolicy

   1、集群级别 'Cluster'  --> "默认","不会保留源ip"

   2、节点级别 'Local'  
  
外部策略为'Local/Cluster',所有集群节点创建'ipvs规则'是有'区别'的

ServiceInternalTrafficPolicy特性在'1.22'的K8s中'默认'开启

Service'选择一个Pod'转发到该Pod,但Service选择的Pod'不一定在接收请求的节点上'

思考1: 'Local'可以获取到客户端源ip的'原因?'

思考2: 在集群内'没有对应endpoint'的'节点上或pod内'通过'svc ip'访问,为什么'时通时不通'?

原因:  curl svc_ip:port 时,由于是'Local','ep有两个实例',但是'接收'流量的节点上没有pod

注意:  访问 svc 'Local' 的服务时,一定要注意'访问节点ip上'面要有svc关联 Pod 调度

k8s中的'实例'通常称之为'endpoint'

首先在'Cluster'模式下,ipvs模式下,流量到达'非pod 所在的节点'时,会再做一次'FULL-NAT'

细节:

 1、 Kube-proxy在做'转发'时候,会做一次'SNAT' (source network address translation)

 2、 所以'源IP'变成了'首先接收请求'的'节点' ip地址

②  k8s ipvs模式常用命令

需求: 查询某个 '虚拟ip' 地址的详细信息

ipvsadmn -ln -t vip:port

-g: --gatewaying, 指定LVS工作模式为'Direct-routing 直接路由'方式,是'LVS'默认工作模式

-i: --ipip, 指定LVS的工作模式为'隧道封装'模式

-m:--masquerading, 指定LVS的工作模式为'MAT'模式 --> 'NAT'和'Full-Nat'模式

conntrack -L | grep 'ip'

误区: pod服务'启动'有这个端口,但是没有通过任何形式'暴露'端口,所以'除了该pod内'都无法访问

 ③  ACK云产品的Service 

说明: 以下讲解ACK 的'flannel' 网络插件

Service异常问题排查

每一个pod里面'/etc/resolv.conf' 会'添加'一个东西: ns.svc.cluster.ip

集群内无法访问SLB

使用Service对外暴露应用

阿里云负载均衡'SLB'服务'现在叫CLB'

通过使用自动创建SLB的服务公开应用

Service的负载均衡配置注意事项

遗留: kubectl explain svc.spec.sessionAffinity
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值