Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Set multiple Subject Alternative Names in all SSL Certificates, not only in server.crt and k0s-api.crt #3318

Open
Friz-zy opened this issue Jul 22, 2023 · 1 comment
Labels
enhancement New feature or request

Comments

@Friz-zy
Copy link
Contributor

Friz-zy commented Jul 22, 2023

Is your feature request related to a problem? Please describe.

I have a problem with etcd certificates with setup in docker swarm: in swarm k0s container could has multiple IPs like multiple container IPs and service IP. Only service IP present in dns record which docker resolver return for dns lookup. ETCD gave me a bunch of errors about invalid server, peer or client certs depends on my configuration tries...

Describe the solution you would like

Currently only pki/server.crt and pki/k0s-api.crt contain multiple alternative names, coming from config and auto discovery:

pki/server.crt:
    Subject: O = kubernetes, CN = kubernetes
    X509v3 Subject Alternative Name: 
        DNS:kubernetes, DNS:kubernetes.default, DNS:kubernetes.default.svc,
        DNS:kubernetes.default.svc.cluster, DNS:kubernetes.svc.cluster.local,
        DNS:localhost, DNS:k0s, DNS:k0s-1, DNS:k0s-2, DNS:k0s-3, IP Address:127.0.0.1,
        IP Address:0:0:0:0:0:0:0:1, IP Address:192.168.0.3, IP Address:192.168.0.2,
        IP Address:192.168.0.5, IP Address:10.96.0.1

pki/k0s-api.crt:
    Subject: O = kubernetes, CN = k0s-api
    X509v3 Subject Alternative Name: 
        DNS:kubernetes, DNS:kubernetes.default, DNS:kubernetes.default.svc,
        DNS:kubernetes.default.svc.cluster, DNS:kubernetes.svc.cluster.local,
        DNS:localhost, DNS:k0s, DNS:k0s-1, DNS:k0s-2, DNS:k0s-3, IP Address:127.0.0.1,
        IP Address:0:0:0:0:0:0:0:1, IP Address:192.168.0.3, IP Address:192.168.0.2,
        IP Address:192.168.0.5, IP Address:10.96.0.1

Golang code that collects it located here

In opposite to api.sans config, storage.etcd.peerAddress allow me set only one address or name, not multiple: config and code

So my suggestion is simple:

  1. set default list of alternatives names, including api.sans list, into all certificates, like it currently works for pki/server.crt and pki/k0s-api.crt
  2. convert storage.etcd.peerAddress into list of strings

List of certificates that require this changes:

pki/etcd/server.crt:
    Subject: O = etcd-server, CN = etcd-server
    X509v3 Subject Alternative Name: 
        DNS:localhost, IP Address:127.0.0.1

pki/etcd/peer.crt:
    Subject: O = etcd-peer, CN = 192.168.0.3
    X509v3 Subject Alternative Name: 
        IP Address:192.168.0.3

pki/apiserver-etcd-client.crt:
    Subject: O = apiserver-etcd-client, CN = apiserver-etcd-client
    X509v3 Subject Alternative Name: 
        DNS:localhost, IP Address:127.0.0.1

Addition certs that could be also updated:

pki/ccm.crt:
    Subject: O = system:kube-controller-manager, CN = system:kube-controller-manager

pki/front-proxy-ca.crt:
    Subject: CN = kubernetes-front-proxy-ca

pki/front-proxy-client.crt:
    Subject: O = front-proxy-client, CN = front-proxy-client

pki/admin.crt:
    Subject: O = system:masters, CN = kubernetes-admin

pki/apiserver-kubelet-client.crt:
    Subject: O = system:masters, CN = apiserver-kubelet-client

pki/scheduler.crt:
    Subject: O = system:kube-scheduler, CN = system:kube-scheduler

pki/konnectivity.crt:
    Subject: O = system:masters, CN = kubernetes-konnectivity

Describe alternatives you've considered

No response

Additional context

No response

@Friz-zy Friz-zy added the enhancement New feature or request label Jul 22, 2023
@jnummelin
Copy link
Member

convert storage.etcd.peerAddress into list of strings

hmm, etcd only accepts a single peer address per node as it's the address other members are supposed to communicate with it. Why would you need multiple SANs on that?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants