Skip to content

Commit

Permalink
RFE-2962: Adding node ip hint for all who want to use it
Browse files Browse the repository at this point in the history
  • Loading branch information
tsorya committed Sep 14, 2022
1 parent 7fc40ce commit ed5ecb5
Showing 1 changed file with 47 additions and 23 deletions.
70 changes: 47 additions & 23 deletions cmd/runtimecfg/node-ip.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
)

Expand Down Expand Up @@ -91,47 +94,68 @@ 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
}

ipv6Created, ipv4Created := false, false
for i := 0; i < len(chosenAddresses) && i < 2; i++ {
if utils.IsIPv6(chosenAddresses[i]) && !ipv6Created {
err = writeToFile(nodeIpIpV6File, chosenAddresses[i].String())
if err != nil {
return err
}
ipv6Created = true
} else if !utils.IsIPv6(chosenAddresses[i]) && !ipv4Created {
err = writeToFile(nodeIpIpV4File, chosenAddresses[i].String())
if err != nil {
return err
}
ipv4Created = true
}
}

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)
log.Infof("Writing path %s with content %s", path, data)
_, err = fileToCreate.WriteString(data)
if err != nil {
return err
}
Expand All @@ -142,7 +166,7 @@ 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
if len(chosen) > 0 && net.IPv6len == len(chosen[0]) {
_, err = net.Listen("tcp", "["+chosen[0].String()+"]:")
_, err = net.Listen("tcp", "["+chosen[0].String()+"]")
if err != nil {
log.Errorf("Chosen node IP is not usable")
return err
Expand Down

0 comments on commit ed5ecb5

Please sign in to comment.