Sitelet https://github.com/kubernetes/kops/pull/18307/files
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions pkg/apis/kops/cluster.go
Original file line number Diff line number Diff line change
Expand Up @@ -969,6 +969,19 @@ func (c *Cluster) UsesNoneDNS() bool {
return false
}

// UsesLoadBalancerForKopsController returns true when worker nodes reach kops-controller
// via the cluster API load balancer instead of via gossip-populated /etc/hosts. True for
// None-DNS clusters across all clouds, plus GCE gossip clusters with an API load balancer.
func (c *Cluster) UsesLoadBalancerForKopsController() bool {
if c.UsesNoneDNS() {
return true
}
if c.UsesLegacyGossip() && c.GetCloudProvider() == CloudProviderGCE && c.Spec.API.LoadBalancer != nil {
return true
}
return false
}

func (c *Cluster) InstallCNIAssets() bool {
return c.Spec.Networking.AmazonVPC == nil &&
c.Spec.Networking.Calico == nil &&
Expand Down
5 changes: 3 additions & 2 deletions pkg/apis/kops/model/features.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,10 @@ func UseChallengeCallback(cloudProvider kops.CloudProviderID) bool {
// UseKopsControllerForNodeConfig checks if nodeup should use kops-controller to get nodeup.Config.
func UseKopsControllerForNodeConfig(cluster *kops.Cluster) bool {
if cluster.UsesLegacyGossip() {
if cluster.UsesLoadBalancerForKopsController() {
return true
}
switch cluster.GetCloudProvider() {
case kops.CloudProviderGCE:
// We can use cloud-discovery here.
case kops.CloudProviderHetzner, kops.CloudProviderScaleway, kops.CloudProviderDO:
// We don't have a cloud-discovery mechanism implemented in nodeup for many clouds,
// but we assume that we're using a load balancer with a fixed IP address
Expand Down
4 changes: 2 additions & 2 deletions pkg/model/gcemodel/api_loadbalancer.go
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ func (b *APILoadBalancerBuilder) addFirewallRules(c *fi.CloudupModelBuilderConte
})
}

if b.Cluster.UsesNoneDNS() {
if b.Cluster.UsesLoadBalancerForKopsController() {
b.AddFirewallRulesTasks(c, "kops-controller", &gcetasks.FirewallRule{
Lifecycle: b.Lifecycle,
Network: network,
Expand Down Expand Up @@ -256,7 +256,7 @@ func (b *APILoadBalancerBuilder) createInternalLB(c *fi.CloudupModelBuilderConte
"name": "api-" + sn.Name,
},
})
if b.Cluster.UsesNoneDNS() {
if b.Cluster.UsesLoadBalancerForKopsController() {
ipAddress.WellKnownServices = append(ipAddress.WellKnownServices, wellknownservices.KopsController)

fr := &gcetasks.ForwardingRule{
Expand Down
2 changes: 1 addition & 1 deletion pkg/nodemodel/nodeupconfigbuilder.go
Original file line number Diff line number Diff line change
Expand Up @@ -379,7 +379,7 @@ func (n *nodeUpConfigBuilder) BuildConfig(ig *kops.InstanceGroup, wellKnownAddre
controlPlaneIPs = append(controlPlaneIPs, wellKnownAddresses[wellknownservices.KubeAPIServer]...)
}

if cluster.UsesNoneDNS() {
if cluster.UsesLoadBalancerForKopsController() {
bootConfig.APIServerIPs = controlPlaneIPs
} else {
// If we do have a fixed IP, we use it (on some clouds, initially)
Expand Down
39 changes: 39 additions & 0 deletions tests/integration/update_cluster/gossip-gce/kubernetes.tf
Original file line number Diff line number Diff line change
Expand Up @@ -229,6 +229,30 @@ resource "google_compute_firewall" "https-api-ipv6-gossip-k8s-local" {
target_tags = ["gossip-k8s-local-k8s-io-role-control-plane"]
}

resource "google_compute_firewall" "kops-controller-gossip-k8s-local" {
allow {
ports = ["3988"]
protocol = "tcp"
}
disabled = false
name = "kops-controller-gossip-k8s-local"
network = google_compute_network.gossip-k8s-local.name
source_ranges = ["0.0.0.0/0"]
target_tags = ["gossip-k8s-local-k8s-io-role-control-plane"]
}

resource "google_compute_firewall" "kops-controller-ipv6-gossip-k8s-local" {
allow {
ports = ["3988"]
protocol = "tcp"
}
disabled = false
name = "kops-controller-ipv6-gossip-k8s-local"
network = google_compute_network.gossip-k8s-local.name
source_ranges = ["::/0"]
target_tags = ["gossip-k8s-local-k8s-io-role-control-plane"]
}

resource "google_compute_firewall" "lb-health-checks-gossip-k8s-local" {
allow {
protocol = "tcp"
Expand Down Expand Up @@ -462,6 +486,21 @@ resource "google_compute_forwarding_rule" "api-us-test1-gossip-k8s-local" {
subnetwork = google_compute_subnetwork.us-test1-gossip-k8s-local.name
}

resource "google_compute_forwarding_rule" "kops-controller-us-test1-gossip-k8s-local" {
backend_service = google_compute_region_backend_service.api-gossip-k8s-local.id
ip_address = google_compute_address.api-us-test1-gossip-k8s-local.address
ip_protocol = "TCP"
labels = {
"k8s-io-cluster-name" = "gossip-k8s-local"
"name" = "kops-controller-us-test1"
}
load_balancing_scheme = "INTERNAL"
name = "kops-controller-us-test1-gossip-k8s-local"
network = google_compute_network.gossip-k8s-local.name
ports = ["3988"]
subnetwork = google_compute_subnetwork.us-test1-gossip-k8s-local.name
}

resource "google_compute_http_health_check" "api-gossip-k8s-local" {
name = "api-gossip-k8s-local"
port = 3990
Expand Down
Loading