Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Authentication 具有证书的Kubernetes身份验证_Authentication_Ssl_Jenkins_Kubernetes_Kubernetes Security - Fatal编程技术网

Authentication 具有证书的Kubernetes身份验证

Authentication 具有证书的Kubernetes身份验证,authentication,ssl,jenkins,kubernetes,kubernetes-security,Authentication,Ssl,Jenkins,Kubernetes,Kubernetes Security,我正在尝试使用证书对本地托管的Kubernetes群集(v1.6.4)进行身份验证。 这需要在使用的上下文中参与 我遵循文件中关于Minikube的指导原则,该文件是我根据自己的场景改编的: 将客户端证书转换为PKCS: $ sudo openssl pkcs12 -export -out kubernetes.pfx -inkey /etc/kubernetes/pki/apiserver.key -in /etc/kubernetes/pki/apiserver.crt -certfile

我正在尝试使用证书对本地托管的Kubernetes群集(v1.6.4)进行身份验证。 这需要在使用的上下文中参与

我遵循文件中关于Minikube的指导原则,该文件是我根据自己的场景改编的:

  • 将客户端证书转换为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中,使用证书创建凭据

  • 种类
    证书
  • 证书
    上传PKCS#12证书
    并上传文件
    kubernetes.pfx
  • Password
    jenkins
    (在证书创建过程中指定)
  • 管理Jenkins
    ->
    添加新云
    ->
    Kubernetes
  • Kubernetes URL
    https://10.179.1.121:6443
    (作为kubectl配置视图的输出)
  • Kubernetes服务器证书密钥
    :粘贴
    /etc/Kubernetes/pki/ca.crt的内容
  • 禁用https证书检查
    :已检查,因为测试设置没有签名证书
  • Kubernetes命名空间
    :尝试了
    default
    Kubernetes插件
  • 凭证
    CN=kube-apiserver
    (即上面创建的凭证)
  • 现在,当我单击测试连接时,这是Jenkins Web UI中显示的错误消息:

    连接到时出错:执行时失败:GET at:。信息:未经授权

    詹金斯日志显示以下消息:

    2017年9月5日上午10:22:03 io.fabric8.kubernetes.client.Config tryServiceAccount

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

    不幸的是,文档主要局限于Minikube上运行的Kubernetes和Google云引擎,但我看不到前者与本地托管的Kubernetes集群在概念上的区别

    以下用于测试的Curl调用将导致一条非常不同的错误消息:

    $ 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
    
    $curl-v——不安全——cacert/etc/kubernetes/pki/ca.crt——cert kubernetex.pfx:secrethttps://10.179.1.121:6443
    *即将连接()到10.179.1.121端口6443(#0)
    *正在尝试10.179.1.121。。。
    *连接到10.179.1.121(10.179.1.121)端口6443(0)
    *使用certpath:sql:/etc/pki/nssdb初始化NSS
    *跳过SSL对等证书验证
    *NSS:未找到客户端证书:kubernetex.pfx
    *使用TLS\u ECDHE\u RSA\u和\u AES\u 128\u GCM\u SHA256的SSL连接
    *服务器证书:
    *主题:CN=kube apiserver
    *开始日期:2017年6月13日11:33:55 GMT
    *到期日期:2018年6月13日11:33:55 GMT
    *通用名称:kube apiserver
    *发行人:CN=kubernetes
    >GET/HTTP/1.1
    >用户代理:curl/7.29.0
    >主持人:10.179.1.121:6443
    >接受:*/*
    > 
    
    我还建立了一个ServiceAccount:

    $ 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
    
    $kubectl描述serviceaccount--namespace=kubernetes插件
    名称:默认值
    名称空间:kubernetes插件
    标签:
    注释:
    图像提取秘密:
    可装载机密:默认-token-6qwj1
    令牌:default-token-6qwj1
    姓名:詹金斯
    名称空间:kubernetes插件
    标签:
    注释:
    图像提取秘密:
    可安装的秘密:jenkins-token-1d623
    代币:jenkins-token-1d623
    
    处理相关问题,建议使用ServiceAccount或证书,但后一个问题的答案缺乏关于如何将RBAC配置文件绑定到该证书的详细信息。似乎未涵盖此用例。

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


    我建议始终明确设置kube apiserver——服务帐户密钥文件,以匹配kube controller manager——服务帐户私钥文件的值。

    我使用kubeadm创建了集群,因此不需要手动修改这些参数。有没有建议在不重新启动kube apiserver的情况下修复此问题?