@@ -21,6 +21,7 @@ import (
2121 "k8s.io/kops/pkg/rbac"
2222 "k8s.io/kops/upup/pkg/fi"
2323 "k8s.io/kops/upup/pkg/fi/nodeup/nodetasks"
24+ "k8s.io/kops/util/pkg/distributions"
2425)
2526
2627// KuberouterBuilder installs kube-router
@@ -56,5 +57,23 @@ func (b *KuberouterBuilder) Build(c *fi.NodeupModelBuilderContext) error {
5657 BeforeServices : []string {"kubelet.service" },
5758 })
5859
60+ // On older Debian/Ubuntu versions, iproute2 config lives in /etc/iproute2/ rather than /usr/share/iproute2/.
61+ // Create a symlink so the kube-router DaemonSet can mount /usr/share/iproute2/rt_tables.
62+ // Ref: https://github.com/kubernetes/kops/issues/17914
63+ switch b .Distribution {
64+ case distributions .DistributionDebian11 ,
65+ distributions .DistributionDebian12 ,
66+ distributions .DistributionUbuntu2204 ,
67+ distributions .DistributionUbuntu2404 :
68+ c .AddTask (& nodetasks.File {
69+ Path : "/usr/share/iproute2" ,
70+ Type : nodetasks .FileType_Symlink ,
71+ Symlink : fi .PtrTo ("/etc/iproute2" ),
72+ Owner : fi .PtrTo ("root" ),
73+ Group : fi .PtrTo ("root" ),
74+ Mode : fi .PtrTo ("0755" ),
75+ })
76+ }
77+
5978 return nil
6079}
0 commit comments