如果在机器安装了go SDK,如何启动一个apiserver呢? 今天来解决这个问题,api-server的配置无疑是复杂的,本文提供一个成功的案例。
环境
| Component | Version |
|---|---|
| go SDK | 1.17.6 |
| kubernetes | v1.21 |
| etcd | v3.5 |
完整配置
--etcd-servers=http://127.0.0.1:2379
--service-account-issuer=https://kubernetes.default.svc.cluster.local
--service-account-key-file=/etc/kubernetes/pki/sa.pub
--service-account-signing-key-file=/etc/kubernetes/pki/sa.key
--tls-cert-file=/etc/kubernetes/pki/apiserver.crt
--tls-private-key-file=/etc/kubernetes/pki/apiserver.key
--advertise-address=192.168.10.64
以上参数解释参考: kube-apiserver
证书生成
给apiserver生成证书文件,用于--tls-cert-file和tls-private-key-file参数,分别代表证书和私钥。
参考: Generate Certificates Manually
我使用的openssl生成,其中有个坑就是csr.conf:
[ req ]
default_bits = 2048
prompt = no
default_md = sha256
req_extensions = req_ext
distinguished_name = dn
[ dn ]
C = CN
ST = Beijing
L = Beijing
O = Ink # 公司组织名(随便填)
OU = RAD # 公司组织名(随便填)
CN = 192.168.10.64
[ req_ext ]
subjectAltName = @alt_names
[ alt_names ]
DNS.1 = kubernetes
DNS.2 = kubernetes.default
DNS.3 = kubernetes.default.svc
DNS.4 = kubernetes.default.svc.cluster
DNS.5 = kubernetes.default.svc.cluster.local
IP.1 = 192.168.10.64
IP.2 = 192.168.10.64
[ v3_ext ]
authorityKeyIdentifier=keyid,issuer:always
basicConstraints=CA:FALSE
keyUsage=keyEncipherment,dataEncipherment
extendedKeyUsage=serverAuth,clientAuth
subjectAltName=@alt_names
生成这些证书和私钥之后,把它们放入配置路径中:
mkdir -p /etc/kubernetes/pki/
cp server.key /etc/kubernetes/pki/apiserver.key
cp server.crt /etc/kubernetes/pki/apiserver.crt
service-account
另一个需要证书的是SA, 这个是生成一对公私钥:
openssl genrsa -out sa.key 2048
openssl rsa -in sa.key --pubout -out sa.pub
cp sa* /etc/kubernetes/pki/
然后把上面那段参数配置粘贴到IDE里就可以启动了:
验证
简单使用etcd 验证下apiserver是否连上了:
# 应该会有一大坨输出
ETCDCTL_API=3 ./etcdctl get --prefix /registry