008.Kubernetes TLS 인증서 프리젠 테이션을 첨부 만들

인증서는 Kubernetes

1.1 TLS

시스템의 다양한 구성 요소는 암호화 및 통신 인증 및 권한 부여에 대한 TLS 인증서의 사용을 필요는 Kubernetes, 그것은 TLS 인증서로 씨 관련에 배포하기 전에하는 것이 좋습니다.

1.2 CA 인증서 생성 모드

시스템의 다양한 구성 요소는 일반적으로 자기 인증 도구로 통신을 암호화하기 위해 사용는 Kubernetes의 TLS 인증서가 필요합니다 :
  • 하려면 openssl
  • cfssl
  • easyrsa

1.3는 Kubernetes 구성 요소 인증서

배포는 Kubernetes 구성 요소 권장 TLS 상호 인증, 관련 인증서 관련 주요 구성 요소는 다음과 같습니다 :
  • etcd 인증서 : 클러스터가 사용 etcd 사이에 TLS 인증서는 암호화 된 통신을.
  • KUBE-apiserver 인증서 : 인증서 KUBE-apiserver 배열 조립.
  • KUBE 제어기 매니저 인증 : KUBE-apiserver 통신 및 인증.
  • KUBE-스케줄러 인증서 : KUBE-apiserver 통신 및 인증.
  • [kubelet 인증서 또는, 불필요한] 인증 TLS Bootstarp 실시 예를 사용하는 경우, 구성은 필요한 통신 KUBE-apiserver 인증을위한 인증서가 아니다.
  • [KUBE 프록시 인증서 또는, 불필요한] 인증 TLS Bootstarp 실시 예를 사용하는 경우, 구성은 필요한 통신 KUBE-apiserver 인증을위한 인증서가 아니다.

두하려면 openssl 인증서 생성

2.1의 openssl 인증서를 만들려면

  . 1 [루트 마스터 @ ~] # # MASTER_IP = 172.24.8.71 정의 MASTER_IP
   2 [루트 마스터 @ ~] # 번호에서 mkdir의 CERT 별도의 저장 디렉터리 인증서를 생성하는 것이 좋습니다
   . 3 [루트 마스터 @ ~] # 개의 CD CERT
   . 4 마스터 CERT @ [루트 ] #의 openssl genrsa -out ca.key ca.key에서 2048 비트를 생성 2048 #
   . 5 [마스터 CERT @ 루트] / MASTER_IP "ca.key의 -subj에서 - 키를 -nodes 신규 REQ # 1은 OpenSSL을 -x509 CN = $ {} "-days 10000 -out ca.crt # ca.key ca.crt에 (프로비저닝 인증서 -days를 사용하여 유효 시간) 따라 발생
   6. [마스터 CERT @ 루트] # # OpenSSL을 genrsa - 아웃은 server.key-2048은 2048 비트를 생성 은 server.key
   . 7 은 OpenSSL REQ 번호 [마스터 CERT @ 루트] 신규 - 주요이 server.key -subj "/ MASTER_IP CN = $ {}"# -out 된 server.csr 생성은 server.key 인 server.csr 따른
   . 8[루트 @ 마스터 인증서] #하려면 openssl에서는 X509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out는 server.crt -days 10000 # ca.key根据, ca.crt和server.csr生成는 server.crt
   9 [루트 @ 마스터 인증서] #하려면 openssl에서는 X509 -noout -text -in ./server.crt
 

세 개의 인증서를 생성 cfssl

3.1 인증서를 만들 cfssl

  1 [루트 @ 마스터 ~] # 컬 -L https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -o / usr / 지방 / 빈 / cfssl #下载cfssl软件
   2 [루트 @ 마스터 ~] # U는 chmod + X / usr / 지방 / 빈 / cfssl
   3 [루트 @ 마스터 ~] # 컬 -L https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 -o / usr / 지방 / 빈 / cfssljson #의下载의 JSON模板
   4 [루트 @ 마스터 ~] # chmod를 U의 + X / usr / 지방 / 빈 / cfssljson
   5 [루트 @ 마스터 ~] # 컬 -L https://pkg.cfssl.org/R1.2/cfssl -certinfo_linux-AMD64 -o / usr / 지방 / 빈 / cfssl-certinfo
   6 [루트 @ 마스터 ~] # chmod를의 U + X / usr / 지방 / 빈 / cfssl-certinfo
   7 [루트 @ 마스터 ~] #에서 mkdir CERT
   8 [ 루트 @ 마스터 ~] #에서 cd 인증서 /
   9[루트 @ 마스터 CERT] # 개의 cfssl의 인쇄 기본 설정> config.json
 10 [루트 마스터 CERT @] # 개의 cfssl 인쇄 - 기본 CSR> csr.json # 템플릿 구성 JSON 파일 만들기
 (11) #은 cp의 설정 [마스터 CERT @ 루트]. CA에 프로파일 JSON의 CA-config.json 번호 사본
 (12)은 #의 VI의 config.json [마스터 CERT @ 루트] CA-
 13는 {
 14      { "서명"
 15          "기본": {
 16              "유효"가 "168H "
 . (17)          }
 (18)이          정보가" "{
 . 19              "는 Kubernetes "{
 20은                  ": "8760h"유효 "
 (21)가                  "
용도 ": 22                     "서명"
 23                      "키를 암호 용"
 24                      "서버 인증"
 25                      "클라이언트 인증"
 26                  ]
 27              }
 28          }
 29      }
 30 }
 
필드 설명 :
config.json : 프로파일이 여러 정의 다른 만료 시간을 지정할 수 다른 매개 변수 장면, 프로필 서명 된 인증서 후속 사용;
  • 서명이 : 인증서가 다른 인증서에 서명하는 데 사용할 수 있음을 나타내고, ca.pem 인증서가 CA를 생성 = TRUE;
  • 서버 인증은 : 클라이언트 인증서가 제공하는 CA 서버에서 확인할 수 있습니다 나타냅니다;
  • 클라이언트 인증은 : 클라이언트 제공을 위해 서버가 CA 인증서를 확인 할 수 있습니다 나타냅니다.
  1 [@ 마스터 루트 인증서] # 및 CP csr.json CA-csr.json #复制一份CA作为的配置文件
   2 [루트 @ 마스터 CERT] #에 VI의 CA-csr.json
   3- {
   4      "CN": "는 Kubernetes" ,
   5      "키"{
   6          "ALGO": "RSA"
   7          "크기"2048
   8      },
   9      "이름"[
 10          {
 11              개의 "C": "CN",
 12              "ST": "상해" ,
 13              "L": "상해"
 14              "의 O" "K8S"
15              "OU": "시스템"
 16          }
 17     ]
 18 }
 
필드 설명 :
  • CN은 :; 브라우저가 사이트가 합법적인지 확인하려면이 필드를 사용하는 일반 이름은 KUBE-apiserver 사용자 이름 (사용자 이름) 요청으로 인증서에서 필드를 추출;
  • C : 국가;
  • ST : 상태;
  • L : 도시;
  • O : 조직, KUBE-apiserver 요청이 인증에서 사용자의 그룹 (그룹)으로 필드를 추출;
  • OU : 조직 단위.
  1 [루트 마스터 CERT @]를 gencert의 -initca의 CA-csr.json cfssl # | cfssljson 풀린 CA #의 CA 키 생성 (CA-key.pem) 및 인증서 (ca.pem)
팁 : 인증서를 생성 한 후,는 Kubernetes 클러스터는 상호 TLS 인증을 필요로 할 수 있습니다 CA-key.pem하고는 / etc /는 Kubernetes / SSL 디렉토리를 배포 할 모든 컴퓨터에 복사 ca.pem은.

네 easyrsa는 인증서를 생성

4.1 easyrsa 인증서를 만들

  1 [루트 @ 마스터 ~] #에서 mkdir 인증서
   2 [루트 @ 마스터 ~] # 컬 -lo https://storage.googleapis.com/kubernetes-release/easy-rsa/easy-rsa.tar.gz #下载easyrsa软件
   3 [루트 @ 마스터 ~] 쉬운 rsa.tar.gz xzf # 타르
   4 [루트 @ 마스터 ~] # CD를 쉽게 RSA 마스터 / easyrsa3
   5 [루트 @ 마스터 easyrsa3] #에 ./easyrsa INIT-PKI
   6 [루트 @master easyrsa3] # MASTER_IP = 172.24.8.71 #定义MASTER_IP
   7 [루트 @ 마스터 easyrsa3] # ./easyrsa --batch "--req-CN = $ {MASTER_IP} @`날짜 + % s`"빌드 캘리포니아 nopass #生成CA
 
설명 :
--batch : 자동 모드로 설정하는 단계;
--req-CN : 기본 CN 설정
  . 1 [의 루트 easyrsa3 @ 마스터] # ./easyrsa --subject-Alt 키 이름 = "는 IP : MASTER_IP의 $ {}"- 빌드 서버 서버 서버 인증서를 생성하는 전체 NoPass 번호 키를, 그리고
설명 :
빌드 서버 전체 [파일 이름] : 로컬 클라이언트와 서버 서명에 대한 키 쌍을 생성합니다.
  1 [루트 @ 마스터 easyrsa3은] # 개의 CP의 PKI / PKI의 ca.crt는 / 발행 /는 server.crt의 PKI는 / 개인 /은 server.key / 루트 / CERT / #은 관련 인증서를 복사
팁 : 인증서를 생성하는, 클러스터는 Kubernetes은 인증서를 사용하여 구성 될 수있다 :
  • --client - 투 - 파일 = / 루트 / 확실히 / ca.crt
  • --tls-CERT 파일 = / 루트 / 인증서 /는 server.crt
  • --tls - 개인 키 파일 = / 루트 / 인증서 /은 server.key

다섯 인증서 및 관련 구성 항목

5.1 API 서버 인증서

다음과 같은 두 가지 옵션에 대한 API 서버 인증서 구성 :
  • --tls-CERT 파일 문자열
HTTPS의 기본 X509 인증서를 포함하는 파일. (CA의 인증서 (있는 경우), 서버 인증서 후 연결된). HTTPS 경우 서빙는 자체 서명 인증서 및 키가 공개 주소를 생성하여 지정된 디렉토리에 저장됩니다, 활성화 및 --tls-CERT 파일 및 --tls - 개인 키 파일은 제공되지 않습니다 - CERT-DIR.
 
  • --tls - 개인 키 파일 문자열
기본 X509 개인 키 일치 --tls-CERT-파일이 들어있는 파일.

5.2 클라이언트 CA 인증서

  • --client-CA-파일 문자열
If set, any request presenting a client certificate signed by one of the authorities in the client-ca-file is authenticated with an identity corresponding to the CommonName of the client certificate.
该配置明确了 Clent 连接 API Server 时,API Server 应当确保其证书源自哪个 CA 签发;如果其证书不是由该 CA 签发,则拒绝请求;事实上,这个 CA 不必与 HTTPS 端点所使用的证书 CA 相同;同时这里的 Client 是一个泛指的,可以是 kubectl,也可能是你自己开发的应用

5.3 请求头证书

API Server 支持多种认证方式的,其中一种就是使用 HTTP 头中的指定字段来进行认证,相关配置如下:
  • --requestheader-allowed-names stringSlice
List of client certificate common names to allow to provide usernames in headers specified by --requestheader-username-headers. If empty, any client certificate validated by the authorities in --requestheader-client-ca-file is allowed.
  • --requestheader-client-ca-file string
Root certificate bundle to use to verify client certificates on incoming requests before trusting usernames in headers specified by --requestheader-username-headers. WARNING: generally do not depend on authorization being already done for incoming requests.

5.4 kubelet证书

对于 Kubelet 组件,API Server 单独提供了证书配置选项,从而指定 API Server 与 Kubelet 通讯所使用的证书以及其签署的 CA。同时这个 CA 可以完全独立与上述其他CA。同时 Kubelet 组件也提供了反向设置的相关选项:
# API Server
  • --kubelet-certificate-authority string
Path to a cert file for the certificate authority.
  • --kubelet-client-certificate string
Path to a client cert file for TLS.
  • --kubelet-client-key string
Path to a client key file for TLS.
 
# Kubelet
  • --client-ca-file string
If set, any request presenting a client certificate signed by one of the authorities in the client-ca-file is authenticated with an identity corresponding to the CommonName of the client certificate.
  • --tls-cert-file string
File containing x509 Certificate used for serving HTTPS (with intermediate certs, if any, concatenated after server cert). If --tls-cert-file and --tls-private-key-file are not provided, a self-signed certificate and key are generated for the public address and saved to the directory passed to --cert-dir.
  • --tls-private-key-file string
File containing x509 private key matching --tls-cert-file.
5.5 Service Account 证书
在 API Server 配置中,对于 Service Account 同样有两个证书配置:
  • --service-account-key-file stringArray
File containing PEM-encoded x509 RSA or ECDSA private or public keys, used to verify ServiceAccount tokens. The specified file can contain multiple keys, and the flag can be specified multiple times with different files. If unspecified, --tls-private-key-file is used. Must be specified when --service-account-signing-key is provided
  • --service-account-signing-key-file string
Path to the file that contains the current private key of the service account token issuer. The issuer will sign issued ID tokens with this private key. (Requires the 'TokenRequest' feature gate.)
这两个配置描述了对 Service Account 进行签名验证时所使用的证书;不过需要注意的是这里并没有明确要求证书 CA,所以这两个证书的 CA 理论上也是可以完全独立的。
Kubernetes相关证书及配置项参考:
https://mritd.me/2018/08/26/kubernetes-certificate-configuration/
提示:以上证书创建示例参考:https://notes.doublemine.me/2018-03-26-Kubernetes%E9%9B%86%E7%BE%A4%E4%B9%8B%E8%B7%AF%E4%B9%8BTLS%E8%AF%81%E4%B9%A6%E9%85%8D%E7%BD%AE.html

추천

출처www.cnblogs.com/itzgr/p/11120079.html