在 test/e2e/network
中,目前有45个标记为 [LinuxOnly]
的测试,其中似乎有37个不正确或至少可疑:
- 15声称Windows不支持
SessionAffinity
,而实际上 was implemented inpkg/proxy/winkernel
4 years ago - 14个测试双栈,它们在Windows上可以工作,但 is (was?) not fully supported by our CI environment
- 3个需要agnhost中的UDP支持,而相关测试声称它不起作用,尽管我怀疑这实际上意味着 "在 the time these tests were merged 时,Windows agnhost映像尚未使用 recently-added udp client 重新构建"。
- 2个使用
hostNetwork
pods,而实际上 now exist in alpha on Windows ,因此我们至少应该选择性地在那里运行它们 - 1个使用pod hostPorts,而它们已经被 supported on Windows since 2020 。
- 1个被跳过,因为 "IPv6在Windows上不受支持",而这实际上是不正确的。
看似正确的测试:
- 5个使用SCTP,据AIUI,Windows内核没有实现并且不打算实现。
- 3个测试部分DNS名称(
kubernetes.default.svc
)显然不受Windows解析器的支持
8条答案
按热度按时间8hhllhi21#
/triage accepted
a8jjtwal2#
你好,
确实,有很多测试被标记为
[LinuxOnly]
,从那时起,有一些测试被修复并/或随着时间的推移移除了这个标签,不一定都是与网络相关的[1][2][3][4][5][6](也可能有其他的)。但是在你提到的这45个测试中,并不是所有的都被标记为[Conformance]
,或者至少就我所知,我只看到了8个:值得一提的是,可能还有更多的测试在Windows上通过类似
SkipIfNodeOSDistroIs("windows")
的方式被跳过,我不确定它们是否包含在你的数量中。我记得我们不允许给[Conformance]
测试添加跳过,这就是为什么一开始需要这个标签的原因。这个标签通常不会被添加到不符合规范的测试中,但我认为将其作为标签是有用的;它使得更容易用grep查找哪些测试是专为Linux设计的还是不是。至于仅适用于Linux的网络测试的数量,一个更完整的测试列表可能会很有用,这样我们就可以检查它们是否被错误标记了,或者具体我们在谈论哪些测试。另外请注意,非符合规范的测试通常不会像符合规范的那样进行测试,所以我不能对它们是否通过说太多。过去有一些努力推动更多网络测试进入符合规范的范围[7],但目前看来这种努力似乎已经停止了。
现在,关于你提到的这些测试:
SessionAffinity
:可能需要更深入的调查。但从快速查看来看,它不起作用[8](将所有网络测试标记为[Conformance]
,这样它们就会由Windows CI运行):[Feature:IPv6DualStack]
,所以我们可以用这个标签将它们排除在外。should function for node-pod communication: udp
?hostNetwork
测试:同意。不过,我认为有超过2个测试。hostPorts
测试似乎在Windows [7]上失败了,可能需要进一步调查:should provide Internet connection for containers
?它可能需要更多的调查。似乎有一个失败[10]:forward host lookup failed: h_errno 11001: HOST_NOT_FOUND
[1] #101063
[2] #72729
[3] #97045
[4] #85453
[5] #78731
[6] #75591
[7] #73425
[8] https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/124447/pull-kubernetes-e2e-capz-windows-master/1782468233807269888
[9] #100870 (comment)
[10] https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/124447/pull-kubernetes-e2e-capz-windows-master/1782725964745150464
[11] https://learn.microsoft.com/en-us/answers/questions/778329/sctp-driver
50pmv0ei3#
在您提到的45个测试中,并非所有测试都被标记为
[Conformance]
确实如此,但它们都涉及到用户可能想要使用的已记录功能。正如您所说,我们最终希望将更多测试转向符合性,因此Windows确实应该努力通过所有不是真正针对Linux的功能。
另外值得一提的是,通过类似
SkipIfNodeOSDistroIs("windows")
的方式,可能会有更多的测试在Windows上被跳过,我不确定它们是否包含在您的计数中。不...我只查看了
[LinuxOnly]
。should function for node-pod communication: udp
?不,抱歉,我应该列出这些。
test/e2e/network/netpol/network_policy.go
中的NetworkPolicy between server and client using UDP
测试(实际上,它们都是[LinuxOnly]
和SkipIfNodeOSDistroIs("windows")
!)hostNetwork
测试:同意。不过,我认为有超过2个测试。也许其他测试是跳过而不是标记的。
should provide Internet connection for containers
?是的
SCTP甚至没有被大多数Linux网络插件实现,而且看起来sig-windows已经有很多事情要做了,所以说它不在Windows上受支持似乎是合理的。如果有人想让它成为官方支持的话,他们可以去做这项工作...
dzjeubhm4#
/assign @sebsoto
2exbekwf5#
在几个任务中运行了
[LinuxOnly]
测试[1][2]。以下是一些结果:should test kubelet managed /etc/hosts file
- containerd 支持容器中的单文件Map,因此这应该可以工作。已在此提交修复 Windows 上测试的 PR:e2e tests: Enables should test kubelet managed /etc/hosts file for Windows #124852validates that there is no conflict between pods with same hostPort but different hostIP and protocol
:无法连接到暴露的主机端口:should ensure an IP overlapping both IPBlock.CIDR and IPBlock.Except is allowed [Feature:NetworkPolicy]
,should allow egress access on one named port [Feature:NetworkPolicy]
,should allow ingress access on one named port [Feature:NetworkPolicy]
:should function for client IP based session affinity: udp
,should function for client IP based session affinity: http
:Unexpected endpoints return: map[netserver-0:{} netserver-1:{}], expect 1 endpoints
:should have session affinity work for service with type clusterIP
,should have session affinity timeout work for NodePort service
,should be able to switch session affinity for service with type clusterIP
:Affinity should hold but didn't.
should fail health check node port if there are only terminating endpoints
:curl超时:internalTrafficPolicy
和externalTrafficPolicy
测试:curl退出代码7(无法连接到主机或代理):[1] https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/124447/pull-kubernetes-e2e-capz-windows-master/1783804706359873536
[2] https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/124447/pull-kubernetes-e2e-capz-windows-master/1790109519284539392
vcirk6k66#
另外值得一提的是,在Windows上可能有更多的测试被跳过,例如
SkipIfNodeOSDistroIs("windows")
,我不确定它们是否包含在你的计数中。不,我只查看了
[LinuxOnly]
。顺便说一下,
SkipIfNodeOSDistroIs("windows")
的测试并不多,大多数与存储相关(需要RunAsUser
或fs组),或者与sysctl相关。这些测试中的大多数也用[LinuxOnly]
标记。6yoyoihd7#
/cc @sbangari
cu6pst1q8#
should ensure an IP overlapping both IPBlock.CIDR and IPBlock.Except is allowed [Feature:NetworkPolicy]
):这个测试是专门添加的,因为多个实现方式得到了错误的行为,所以这可能指向了你的NetworkPolicy实现中的一个bug。
should allow egress access on one named port [Feature:NetworkPolicy]
,should allow ingress access on one named port [Feature:NetworkPolicy]
:命名端口是一个稍微模糊的功能,许多人在他们的初始NetworkPolicy实现中跳过了它(然后有时永远不会再回来)。
should fail health check node port if there are only terminating endpoints
: curl超时:这里实际测试的行为完全在kube-proxy的平台无关部分,所以这可能是e2e测试中的一个bug/Linux特性。(可能是关于pod到节点连接的一个错误假设?我总是忘记哪些是可以的,哪些是不可以的。)
internalTrafficPolicy
和externalTrafficPolicy
测试:curl退出代码7(无法连接到主机或代理):可能是同样的问题,但是,winkernel有自己确定要使用哪些端点的方法,而不是使用
proxy.CategorizeEndpoints
,所以它可能会破坏一些边缘情况。