kubernetes/kops · error

DNS is not yet implemented for Akamai (Linode)

Error message

DNS is not yet implemented for Akamai (Linode)

What it means

The Akamai (Linode) Cloud.DNS() implementation is a stub: the Linode provider has no DNS integration in kops, so any request for a dnsprovider.Interface fails with this explicit 'not yet implemented' error.

Source

Thrown at upup/pkg/fi/cloudup/linode/cloud.go:115

	client.SetUserAgent("kops/" + kopsv.Version)
	client.SetToken(accessToken)

	return &Cloud{
		region: region,
		client: &client,
	}, nil
}

func (c *Cloud) Client() LinodeClient {
	return c.client
}

func (c *Cloud) ProviderID() kops.CloudProviderID {
	return kops.CloudProviderLinode
}

func (c *Cloud) DNS() (dnsprovider.Interface, error) {
	return nil, fmt.Errorf("DNS is not yet implemented for Akamai (Linode)")
}

func (c *Cloud) FindVPCInfo(id string) (*fi.VPCInfo, error) {
	return nil, nil
}

func (c *Cloud) DeleteInstance(instance *cloudinstances.CloudInstance) error {
	instanceID, err := strconv.Atoi(instance.ID)
	if err != nil {
		return fmt.Errorf("error parsing Akamai (Linode) instance ID %q: %w", instance.ID, err)
	}

	if err := c.client.DeleteInstance(context.Background(), instanceID); err != nil {
		if linodego.IsNotFound(err) {
			return nil
		}
		return fmt.Errorf("error deleting Akamai (Linode) instance %q: %w", instance.ID, err)
	}

View on GitHub (pinned to 4c8573c808)

Solutions

  1. Configure the cluster to use gossip DNS (e.g. top-level DNS: type gossip / `kops create cluster --dns gossip`) so no cloud DNS provider is needed.
  2. Manage DNS records externally for the cluster name and keep gossip DNS inside the cluster.
  3. Track/upvote upstream support for Linode DNS in kops before relying on DNS-mode clusters.

Example fix

// before (create with DNS)
kops create cluster --cloud linode --name cluster.example.com ...
// after (gossip DNS)
kops create cluster --cloud linode --name cluster.k8s.local ...
Defensive patterns

Strategy: fallback

Validate before calling

// before provisioning, require gossip DNS for Linode:
if provider == kops.CloudProviderLinode && cluster.Spec.DNS != nil && cluster.Spec.DNS.Type != "gossip" {
	return fmt.Errorf("Linode provider requires gossip DNS (e.g. cluster name ending in .k8s.local)")
}

Try / catch

dns, err := cloud.DNS()
if err != nil && strings.Contains(err.Error(), "not yet implemented for Akamai") {
	// fall back to gossip DNS path instead of cloud DNS
}

Prevention

When it happens

Trigger: Any kops code path that requires cloud DNS for a Linode cluster — e.g. `kops update cluster` with gossip disabled (DNS-based cluster naming), or DNS validation during cluster creation.

Common situations: Users creating a Linode cluster with a real DNS name expecting kOps to create DNS records; the provider only supports gossip DNS (kube-dns/ CoreDNS gossip).

Related errors


AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05). Data as JSON: /api/errors/9b7ec1540ed3b5db. Report an issue: GitHub.