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
- 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.
- Manage DNS records externally for the cluster name and keep gossip DNS inside the cluster.
- 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
- Use a .k8s.local cluster name so kops selects gossip DNS
- Do not configure route53/external DNS controller expectations for Linode clusters
- Check the provider capability matrix before enabling DNS-dependent features
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
- instance group deletion is not yet implemented for Akamai (L
- instance detach is not yet implemented for Akamai (Linode)
- error parsing Akamai (Linode) %s ID %q: %w
- error listing Akamai (Linode) instances: %w
- error listing Akamai (Linode) volumes: %w
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/9b7ec1540ed3b5db.
Report an issue: GitHub.