当前位置: 首页 > 知识库问答 >
问题:

带证书的Kubernetes认证

陆卓
2023-03-14

我试图使用证书对本地托管的Kubernetes集群(V1.6.4)进行身份验证。这是在使用Jenkins的Kubernetes插件的上下文中进行的。

>

  • 将客户端证书转换为PKCS:

    $ sudo openssl pkcs12 -export -out kubernetes.pfx -inkey /etc/kubernetes/pki/apiserver.key -in /etc/kubernetes/pki/apiserver.crt -certfile /etc/kubernetes/pki/ca.crt -passout pass:jenkins
    

    在Jenkins中,使用证书创建凭据

    1. 种类:证书
    2. 证书:上载PKCS#12证书和上载文件kubernetes.pfx
    3. 密码:Jenkins(在证书创建过程中指定)
      null

    2017年09月05日上午10:22:03 IO.fabric8.kubernetes.client.config tryServiceAccount

    警告:从[/var/run/secrets/kubernetes.io/serviceaccount/token]读取服务帐户令牌时出错。不理。

    不幸的是,文档大多局限于运行在Minikube和Google Cloud Engine上的Kubernetes,但我看不出前者和本地托管的Kubernetes集群之间的概念差异。

    $ curl --insecure --cacert /etc/kubernetes/pki/ca.crt --cert kubernetex.pfx:secret https://10.179.1.121:6443
    User "system:anonymous" cannot get  at the cluster scope. 
    
    $ curl -v --insecure --cacert /etc/kubernetes/pki/ca.crt --cert kubernetex.pfx:secret https://10.179.1.121:6443
    * About to connect() to 10.179.1.121 port 6443 (#0)
    *   Trying 10.179.1.121...
    * Connected to 10.179.1.121 (10.179.1.121) port 6443 (#0)
    * Initializing NSS with certpath: sql:/etc/pki/nssdb
    * skipping SSL peer certificate verification
    * NSS: client certificate not found: kubernetex.pfx
    * SSL connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
    * Server certificate:
    *   subject: CN=kube-apiserver
    *   start date: Jun 13 11:33:55 2017 GMT
    *   expire date: Jun 13 11:33:55 2018 GMT
    *   common name: kube-apiserver
    *   issuer: CN=kubernetes
    > GET / HTTP/1.1
    > User-Agent: curl/7.29.0
    > Host: 10.179.1.121:6443
    > Accept: */*
    > 
    < HTTP/1.1 403 Forbidden
    < Content-Type: text/plain
    < X-Content-Type-Options: nosniff
    < Date: Tue, 05 Sep 2017 10:34:23 GMT
    < Content-Length: 57
    < 
    * Connection #0 to host 10.179.1.121 left intact
    
    $ kubectl describe serviceaccount --namespace=kubernetes-plugin 
    Name:       default
    Namespace:  kubernetes-plugin
    Labels:     <none>
    Annotations:    <none>
    
    Image pull secrets: <none>
    
    Mountable secrets:  default-token-6qwj1
    
    Tokens:             default-token-6qwj1
    
    
    
    Name:       jenkins
    Namespace:  kubernetes-plugin
    Labels:     <none>
    Annotations:    <none>
    
    Image pull secrets: <none>
    
    Mountable secrets:  jenkins-token-1d623
    
    Tokens:             jenkins-token-1d623
    

    这个问题涉及一个相关的问题,建议使用ServiceAccount或证书,但对后者的回答缺乏关于如何将RBAC配置文件绑定到该证书的细节。关于身份验证的Kubernetes文档似乎没有涵盖这个用例。

  • 共有1个答案

    胡新
    2023-03-14

    警告:读取service account令牌时出错,表示用于加密ServiceAccount令牌的密钥在kube-apiserver(--service-account-key-file)和kube-controller-manager(--service-account-private-key-file)之间不同。如果您的kube-apiserver命令行没有指定--service-account-key-file,那么将使用--tls-private-key-file的值,我怀疑这就是问题所在。

    我建议始终显式地设置kube-apiserver--service-account-key-file以匹配kube-controller-manager--service-account-private-key-file值。

     类似资料:
    • 我知道10.254.0.1:443实际上提供来自主节点(端口6443上的api)(192.168.0.200)的证书,但如何解析,10.254.0.1提供其有效证书。 以下是clusterip API的描述:[root@master01 dns]#kubectl description service kubernetes namespace:default labels:component=ap

    • null 大多数示例使用makecert或New-SelfSignedCertificate创建证书。在这种情况下,对于生产应用程序,自签名证书是否有问题?这仅供应用程序使用Azure Key Vault进行身份验证,客户机在浏览器中不会看到这一点。 如果在这种情况下,自签名证书仍然不受欢迎,那么从受信任的权威机构购买证书是否与购买SSL/TLS证书的过程相同?甚至是同一类型的证书吗?

    • 我有_client-cert.pem和client-key.pem和ca.pem文件,我正试图将它们添加到grails项目中。 使用client-keystore.p12文件创建Java密钥库 keytool-importkeystore-srckeystore客户端-keystore.p12-srcstoreType pkcs12\-srcstorePass mypassword-destkey

    • 下面是一个例子: 我还将ingress配置为在所有主机名上使用机密,而不指定host:tls:-secretname:******WTE-Ingress

    • 我有一个kubernetes cluster 1.6.1运行在kuberentes dashboard(gcr.io/google_containers/kubernetes-dashboard-amd64:v1.6.1)上,我无法更新我们域的tls证书,该站点显示为不安全。 它使用的是使用KOPS设置集群时创建的kubernetes-master证书。 在其他部署/吊舱上,我能够使用具有正确tl