Commit 1ffb4603 authored by Roberto Bonafiglia's avatar Roberto Bonafiglia Committed by Roberto Bonafiglia

Use IPv6 in case is the first configured IP with dualstack

parent 3d25e9f6
...@@ -353,7 +353,7 @@ func get(ctx context.Context, envInfo *cmds.Agent, proxy proxy.Proxy) (*config.N ...@@ -353,7 +353,7 @@ func get(ctx context.Context, envInfo *cmds.Agent, proxy proxy.Proxy) (*config.N
// If the supervisor and externally-facing apiserver are not on the same port, tell the proxy where to find the apiserver. // If the supervisor and externally-facing apiserver are not on the same port, tell the proxy where to find the apiserver.
if controlConfig.SupervisorPort != controlConfig.HTTPSPort { if controlConfig.SupervisorPort != controlConfig.HTTPSPort {
_, isIPv6, _ := util.GetFirstString([]string{envInfo.NodeIP.String()}) isIPv6 := utilsnet.IsIPv6(net.ParseIP([]string{envInfo.NodeIP.String()}[0]))
if err := proxy.SetAPIServerPort(ctx, controlConfig.HTTPSPort, isIPv6); err != nil { if err := proxy.SetAPIServerPort(ctx, controlConfig.HTTPSPort, isIPv6); err != nil {
return nil, errors.Wrapf(err, "failed to setup access to API Server port %d on at %s", controlConfig.HTTPSPort, proxy.SupervisorURL()) return nil, errors.Wrapf(err, "failed to setup access to API Server port %d on at %s", controlConfig.HTTPSPort, proxy.SupervisorURL())
} }
......
...@@ -276,7 +276,7 @@ func createProxyAndValidateToken(ctx context.Context, cfg *cmds.Agent) (proxy.Pr ...@@ -276,7 +276,7 @@ func createProxyAndValidateToken(ctx context.Context, cfg *cmds.Agent) (proxy.Pr
if err := os.MkdirAll(agentDir, 0700); err != nil { if err := os.MkdirAll(agentDir, 0700); err != nil {
return nil, err return nil, err
} }
_, isIPv6, _ := util.GetFirstString([]string{cfg.NodeIP.String()}) isIPv6 := utilsnet.IsIPv6(net.ParseIP([]string{cfg.NodeIP.String()}[0]))
proxy, err := proxy.NewSupervisorProxy(ctx, !cfg.DisableLoadBalancer, agentDir, cfg.ServerURL, cfg.LBServerPort, isIPv6) proxy, err := proxy.NewSupervisorProxy(ctx, !cfg.DisableLoadBalancer, agentDir, cfg.ServerURL, cfg.LBServerPort, isIPv6)
if err != nil { if err != nil {
......
...@@ -190,7 +190,7 @@ var ServerFlags = []cli.Flag{ ...@@ -190,7 +190,7 @@ var ServerFlags = []cli.Flag{
}, },
&cli.StringFlag{ &cli.StringFlag{
Name: "advertise-address", Name: "advertise-address",
Usage: "(listener) IPv4 address that apiserver uses to advertise to members of the cluster (default: node-external-ip/node-ip)", Usage: "(listener) IPv4/IPv6 address that apiserver uses to advertise to members of the cluster (default: node-external-ip/node-ip)",
Destination: &ServerConfig.AdvertiseIP, Destination: &ServerConfig.AdvertiseIP,
}, },
&cli.IntFlag{ &cli.IntFlag{
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
package agent package agent
import ( import (
"net"
"os" "os"
"path/filepath" "path/filepath"
"strings" "strings"
...@@ -13,8 +14,8 @@ import ( ...@@ -13,8 +14,8 @@ import (
"github.com/k3s-io/k3s/pkg/util" "github.com/k3s-io/k3s/pkg/util"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
"golang.org/x/sys/unix" "golang.org/x/sys/unix"
"k8s.io/apimachinery/pkg/util/net"
"k8s.io/kubernetes/pkg/kubeapiserver/authorizer/modes" "k8s.io/kubernetes/pkg/kubeapiserver/authorizer/modes"
utilsnet "k8s.io/utils/net"
) )
const socketPrefix = "unix://" const socketPrefix = "unix://"
...@@ -32,8 +33,8 @@ func createRootlessConfig(argsMap map[string]string, controllers map[string]bool ...@@ -32,8 +33,8 @@ func createRootlessConfig(argsMap map[string]string, controllers map[string]bool
func kubeProxyArgs(cfg *config.Agent) map[string]string { func kubeProxyArgs(cfg *config.Agent) map[string]string {
bindAddress := "127.0.0.1" bindAddress := "127.0.0.1"
_, IPv6only, _ := util.GetFirstString([]string{cfg.NodeIP}) isIPv6 := utilsnet.IsIPv6(net.ParseIP([]string{cfg.NodeIP}[0]))
if IPv6only { if isIPv6 {
bindAddress = "::1" bindAddress = "::1"
} }
argsMap := map[string]string{ argsMap := map[string]string{
...@@ -53,8 +54,8 @@ func kubeProxyArgs(cfg *config.Agent) map[string]string { ...@@ -53,8 +54,8 @@ func kubeProxyArgs(cfg *config.Agent) map[string]string {
func kubeletArgs(cfg *config.Agent) map[string]string { func kubeletArgs(cfg *config.Agent) map[string]string {
bindAddress := "127.0.0.1" bindAddress := "127.0.0.1"
_, IPv6only, _ := util.GetFirstString([]string{cfg.NodeIP}) isIPv6 := utilsnet.IsIPv6(net.ParseIP([]string{cfg.NodeIP}[0]))
if IPv6only { if isIPv6 {
bindAddress = "::1" bindAddress = "::1"
} }
argsMap := map[string]string{ argsMap := map[string]string{
...@@ -122,9 +123,12 @@ func kubeletArgs(cfg *config.Agent) map[string]string { ...@@ -122,9 +123,12 @@ func kubeletArgs(cfg *config.Agent) map[string]string {
if cfg.NodeName != "" { if cfg.NodeName != "" {
argsMap["hostname-override"] = cfg.NodeName argsMap["hostname-override"] = cfg.NodeName
} }
defaultIP, err := net.ChooseHostInterface() if nodeIPs := util.JoinIPs(cfg.NodeIPs); nodeIPs != "" {
if err != nil || defaultIP.String() != cfg.NodeIP { dualStack, err := utilsnet.IsDualStackIPs(cfg.NodeIPs)
argsMap["node-ip"] = cfg.NodeIP if err == nil && dualStack {
argsMap["feature-gates"] = util.AddFeatureGate(argsMap["feature-gates"], "CloudDualStackNodeIPs=true")
}
argsMap["node-ip"] = nodeIPs
} }
kubeletRoot, runtimeRoot, controllers := cgroups.CheckCgroups() kubeletRoot, runtimeRoot, controllers := cgroups.CheckCgroups()
if !controllers["cpu"] { if !controllers["cpu"] {
......
...@@ -50,7 +50,6 @@ def provision(vm, role, role_num, node_num) ...@@ -50,7 +50,6 @@ def provision(vm, role, role_num, node_num)
service-cidr: 10.43.0.0/16,2001:cafe:42:1::/112 service-cidr: 10.43.0.0/16,2001:cafe:42:1::/112
bind-address: #{NETWORK4_PREFIX}.100 bind-address: #{NETWORK4_PREFIX}.100
flannel-iface: eth1 flannel-iface: eth1
kubelet-arg: "--node-ip=0.0.0.0" # Workaround for https://github.com/kubernetes/kubernetes/issues/111695
YAML YAML
k3s.env = ["K3S_KUBECONFIG_MODE=0644", install_type] k3s.env = ["K3S_KUBECONFIG_MODE=0644", install_type]
end end
...@@ -66,7 +65,6 @@ def provision(vm, role, role_num, node_num) ...@@ -66,7 +65,6 @@ def provision(vm, role, role_num, node_num)
cluster-cidr: 10.42.0.0/16,2001:cafe:42:0::/56 cluster-cidr: 10.42.0.0/16,2001:cafe:42:0::/56
service-cidr: 10.43.0.0/16,2001:cafe:42:1::/112 service-cidr: 10.43.0.0/16,2001:cafe:42:1::/112
flannel-iface: eth1 flannel-iface: eth1
kubelet-arg: "--node-ip=0.0.0.0" # Workaround for https://github.com/kubernetes/kubernetes/issues/111695
YAML YAML
k3s.env = ["K3S_KUBECONFIG_MODE=0644", install_type] k3s.env = ["K3S_KUBECONFIG_MODE=0644", install_type]
end end
...@@ -81,7 +79,6 @@ def provision(vm, role, role_num, node_num) ...@@ -81,7 +79,6 @@ def provision(vm, role, role_num, node_num)
server: https://#{NETWORK4_PREFIX}.100:6443 server: https://#{NETWORK4_PREFIX}.100:6443
token: vagrant token: vagrant
flannel-iface: eth1 flannel-iface: eth1
kubelet-arg: "--node-ip=0.0.0.0" # Workaround for https://github.com/kubernetes/kubernetes/issues/111695
YAML YAML
k3s.env = ["K3S_KUBECONFIG_MODE=0644", install_type] k3s.env = ["K3S_KUBECONFIG_MODE=0644", install_type]
end end
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment