diff --git a/cmd/runtimecfg/node-ip.go b/cmd/runtimecfg/node-ip.go index 8d3fcc45..a44d2c58 100644 --- a/cmd/runtimecfg/node-ip.go +++ b/cmd/runtimecfg/node-ip.go @@ -17,6 +17,9 @@ import ( const ( kubeletSvcOverridePath = "/etc/systemd/system/kubelet.service.d/20-nodenet.conf" + nodeIpFile = "/run/nodeip-configuration/primary-ip" + nodeIpIpV6File = "/run/nodeip-configuration/ipv6" + nodeIpIpV4File = "/run/nodeip-configuration/ipv4" crioSvcOverridePath = "/etc/systemd/system/crio.service.d/20-nodenet.conf" ) @@ -91,53 +94,79 @@ func set(cmd *cobra.Command, args []string) error { } log.Infof("Chosen Node IPs: %v", chosenAddresses) - // Kubelet - kubeletOverrideDir := filepath.Dir(kubeletSvcOverridePath) - err = os.MkdirAll(kubeletOverrideDir, 0755) - if err != nil { - return err - } - log.Infof("Opening Kubelet service override path %s", kubeletSvcOverridePath) - kOverride, err := os.Create(kubeletSvcOverridePath) - if err != nil { - return err - } - defer kOverride.Close() - nodeIP := chosenAddresses[0].String() nodeIPs := nodeIP if len(chosenAddresses) > 1 { nodeIPs += "," + chosenAddresses[1].String() } + // Kubelet kOverrideContent := fmt.Sprintf("[Service]\nEnvironment=\"KUBELET_NODE_IP=%s\" \"KUBELET_NODE_IPS=%s\"\n", nodeIP, nodeIPs) log.Infof("Writing Kubelet service override with content %s", kOverrideContent) - _, err = kOverride.WriteString(kOverrideContent) + err = writeToFile(kubeletSvcOverridePath, kOverrideContent) if err != nil { return err } // CRI-O - crioOverrideDir := filepath.Dir(crioSvcOverridePath) - err = os.MkdirAll(crioOverrideDir, 0755) + cOverrideContent := fmt.Sprintf("[Service]\nEnvironment=\"CONTAINER_STREAM_ADDRESS=%s\"\n", nodeIP) + log.Infof("Writing CRIO service override with content %s", cOverrideContent) + err = writeToFile(crioSvcOverridePath, cOverrideContent) + if err != nil { + return err + } + + // node ip hint for all other services + err = writeToFile(nodeIpFile, nodeIP) + if err != nil { + return err + } + for _, ip := range chosenAddresses[0:1] { + if utils.IsIPv6(ip) && !fileExists(nodeIpIpV6File) { + err = writeToFile(nodeIpIpV6File, chosenAddresses[0].String()) + if err != nil { + return err + } + } else if !utils.IsIPv6(ip) && !fileExists(nodeIpIpV4File) { + err = writeToFile(nodeIpIpV4File, chosenAddresses[0].String()) + if err != nil { + return err + } + } + } + + return nil +} + +func writeToFile(path string, data string) error { + dir := filepath.Dir(path) + err := os.MkdirAll(dir, 0755) if err != nil { return err } - log.Infof("Opening CRI-O service override path %s", crioSvcOverridePath) - cOverride, err := os.Create(crioSvcOverridePath) + log.Infof("Opening path %s", path) + fileToCreate, err := os.Create(path) if err != nil { return err } - defer cOverride.Close() + defer fileToCreate.Close() - cOverrideContent := fmt.Sprintf("[Service]\nEnvironment=\"CONTAINER_STREAM_ADDRESS=%s\"\n", chosenAddresses[0]) - log.Infof("Writing CRI-O service override with content %s", cOverrideContent) - _, err = cOverride.WriteString(cOverrideContent) + // cOverrideContent := fmt.Sprintf("[Service]\nEnvironment=\"CONTAINER_STREAM_ADDRESS=%s\"\n", chosenAddresses[0]) + log.Infof("Writing path %s with content %s", path, data) + _, err = fileToCreate.WriteString(data) if err != nil { return err } return nil } +func fileExists(path string) bool { + _, err := os.Stat(path) + if err != nil { + return false + } + return true +} + func checkAddressUsable(chosen []net.IP) (err error) { // If using IPv6, verify that the choosen address isn't tentative // i.e. we can actually bind to it