-
Notifications
You must be signed in to change notification settings - Fork 457
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
1.12.3 默认VPC内使用OVN EIP,但是ping的回包还是原ip #3502
Comments
麻烦贴下你的 install.sh 的 ENABLE_xx 那几行相关的配置,自定义 vpc 目前没这个 bug。 怀疑可能跟一些特性开启有关系 |
好的 DEBUG_WRAPPER=${DEBUG_WRAPPER:-} 您看看,自定义VPC好像是没问题,我这个问题出现在默认VPC |
我感觉配置没问题,应该就是引入了一个bug |
有计划修复? |
@oilbeater 大佬,默认vpc好像引入了一个bug,感觉跟路由有关系,导致eip snat的流量没有经过nat规则转化就回包了 |
@oilbeater 大佬,这个有修改计划么? |
1.12.4 默认 VPC 也有同样的问题, ovn-eip 不生效。 |
经过一番研究发现,通过添加如下 route 可以实现 eip nat。 kubectl ko nbctl lr-policy-add ovn-cluster 31000 'ip4.src == 10.5.193.243' reroute 10.5.0.1
kubectl ko nbctl lr-policy-list ovn-cluster 其中
怀疑可能是默认 VPC 下的 pod 全部路由到 join subnet ,而无法 snat 了
@bobz965 上面的分析正确吗,是不是可以通过代码强制加 policy route 来修复这个问题呢 |
https://kubeovn.github.io/docs/v1.13.x/guide/eip-snat/ 你对照下这个eip的使用方式是否可以正常使用? 然后对照下看是否是你的策略路由的维护逻辑。如果一致,应该就没问题。 |
我之前 pod 没有加 annotation ,只是使用自定义 VPC 一样,使用了 ovnFIP 这个 yaml @bobz965 是指所有 VPC (不管默认还是自定义 VPC) 的 pod 要使用 ovn EIP/FIP 都需要对应的 pod annotation 吗?还是默认 VPC 的 pod 才需要加这个 annotation ? BTW: 我默认和自定义 VPC 下的 pod 都没加过个 annotation。我以为这个 annotation 是给 IptableEIP/FIP 使用的 |
这个 annotation 和 ovn fip 是同样的 ovn 的资源,只不过只有在默认 vpc 下才能用。如果默认 vpc 下这个 annotation 的 eip 能够正常使用,我理解默认 vpc下的 ovn eip fip 保持同样的维护方式就能修复。 |
@bobz965 通过annotation绑定eip好像可以,但是实际使用的时候不好用,因为pod重建后,需要重新绑定eip,对于虚机来说,重启就会丢失eip,需要重新绑定。所以我们考虑用ovn eip fip方案替代直接通过annotation绑定eip。 |
我这边使用 annotation 创建 pod 会报错 kube-ovn-controller 日志
pod 状态 apiVersion: v1
kind: Pod
metadata:
name: default-pod9
namespace: default
uid: 587dcfb4-6d9e-41fd-9bf3-e222052962d3
resourceVersion: '4017839'
creationTimestamp: '2024-01-24T13:46:29Z'
annotations:
kubectl.kubernetes.io/last-applied-configuration: >
{"apiVersion":"v1","kind":"Pod","metadata":{"annotations":{"ovn.kubernetes.io/eip":"10.5.0.201"},"name":"default-pod9","namespace":"default"},"spec":{"containers":[{"command":["sleep","10d"],"image":"docker.io/jonlabelle/network-tools","name":"default-pod9"}]}}
ovn.kubernetes.io/allocated: 'true'
ovn.kubernetes.io/cidr: 10.5.192.0/18
ovn.kubernetes.io/eip: 10.5.0.201
ovn.kubernetes.io/gateway: 10.5.196.1
ovn.kubernetes.io/ip_address: 10.5.192.68
ovn.kubernetes.io/logical_router: ovn-cluster
ovn.kubernetes.io/logical_switch: ovn-default
ovn.kubernetes.io/mac_address: 00:00:00:97:E4:3F
ovn.kubernetes.io/pod_nic_type: veth-pair
status:
phase: Pending
conditions:
- type: Initialized
status: 'True'
lastProbeTime: null
lastTransitionTime: '2024-01-24T13:46:30Z'
- type: Ready
status: 'False'
lastProbeTime: null
lastTransitionTime: '2024-01-24T13:46:30Z'
reason: ContainersNotReady
message: 'containers with unready status: [default-pod9]'
- type: ContainersReady
status: 'False'
lastProbeTime: null
lastTransitionTime: '2024-01-24T13:46:30Z'
reason: ContainersNotReady
message: 'containers with unready status: [default-pod9]'
- type: PodScheduled
status: 'True'
lastProbeTime: null
lastTransitionTime: '2024-01-24T13:46:30Z'
hostIP: 10.5.0.144
startTime: '2024-01-24T13:46:30Z'
containerStatuses:
- name: default-pod9
state:
waiting:
reason: ContainerCreating
lastState: {}
ready: false
restartCount: 0
image: cr.sihe.cloud/docker.io/jonlabelle/network-tools
imageID: ''
started: false
qosClass: BestEffort 创建 pod 的 yaml apiVersion: v1
kind: Pod
metadata:
namespace: default
name: default-pod9
annotations:
ovn.kubernetes.io/eip: 10.5.0.201
spec:
containers:
- name: default-pod9
image: docker.io/jonlabelle/network-tools
command:
- sleep
- 10d |
从日志看,使用 annotation 的情况下,会加一个 route ,看上去就是和我 PR 中做的事情一样,但不知道为什么 pod 没有创建成功
|
看了一下 port group 确实没有上面日志说的
|
我通过临时创建同名 pg 先绕过了这个 issue ,让 pod 先创成功,但是发现
似乎 policy route 覆盖了日志添加的 static route pod 的流量还是从 node 出去了
|
@bobz965 这个问题可能和之前multiple distributed gateway ports问题是一样的 kubeovn/ovn#4 ,逻辑流表可能没有正确下发is_chassis_resident和outport,因为1.12没有引入我之前对ovn的修复。我待会儿测试一下是不是这个问题,按理说无需配置静态/策略路由。 修正:和multiple dgw的bug无关 |
@zcq98 和multiple dgw的bug无关的话。你本地可以复现这个 BUG 吗?还是你本地不能复现这个 BUG 呢 |
1.12.4 可以复现,添加策略路由就正常了 |
@oilbeater 大佬对这个修复 PR 怎么看 #3666 |
#### 默认vpc ovn eip 参考配置路由
kind: Vpc
apiVersion: kubeovn.io/v1
metadata:
name: ovn-cluster
spec:
namespaces:
- default
policyRoutes:
- action: reroute
match: ip4.src==10.16.0.0/16 && ip4.dst!=169.254.25.10 && ip4.dst!=10.96.0.0/12 && ip4.dst!=100.64.0.0/16 && ip4.dst!=<k8s node ip>
nextHopIP: <公网网关>
priority: 30001 #3666 |
Issues go stale after 60d of inactivity. Please comment or re-open the issue if you are still interested in getting this issue fixed. |
Bug Report
根据https://kubeovn.github.io/docs/v1.12.x/advance/ovn-eip-fip-snat/ 配置默认vpc内的一个虚机使用eip
虽然可以ping通,但是不能ssh连接
但是ping的回包是原ip地址,没有做nat转换
ssh连不上,也是没有eip的回包
Expected Behavior
ping的回包应该是eip地址,ssh要能通
Actual Behavior
Steps to Reproduce the Problem
Additional Info
Kubernetes version:
Output of
kubectl version
:1.18.6
operation-system/kernel version:
Output of
awk -F '=' '/PRETTY_NAME/ { print $2 }' /etc/os-release
:Output of
uname -r
:The text was updated successfully, but these errors were encountered: