kubectl安装
kubectl master节点安装
- kubectl保存至master节点/usr/bin中
kubectl node节点安装
- 在node节点上执行kubectl时,由于kubectl默认连接本机apiserver,所以node节点会提示
The connection to the server localhost:8080 was refused - did you specify the right host or port?
;解决方案./kubectl -s http://10.254.0.53:8080 get pods
node节点执行kubectl省略-s
通过http的方式,无需任何认证
apiVersion: v1
clusters:
- cluster:
server: http://10.254.0.78:8080 # 指定master节点ip
name: test-cluster
contexts:
- context:
cluster: test-cluster
name: default-system
current-context: default-system # 指定当前的环境
通过用户密码认证的方式
生成ca证书,由于是https访问,所以需要https ca证书
-
创建一个新的SA:kubectl create sa test-sa
-
获取secrets.name:通过
kubectl get sa test-sa -o json
或kubectl describe sa test-sa
获取test-sa-token-q48sd
[root@k8s-master sa]# kubectl get sa test-sa -o json { "apiVersion": "v1", "kind": "ServiceAccount", "metadata": { "creationTimestamp": "2018-11-13T01:16:11Z", "name": "test-sa", "namespace": "default", "resourceVersion": "562118", "selfLink": "/api/v1/namespaces/default/serviceaccounts/test-sa", "uid": "b5423679-e6e1-11e8-afac-0800278d208d" }, "secrets": [ { "name": "test-sa-token-q48sd" } ] }
-
获取CA证书:通过
kubectl get secret test-sa-token-q48sd -o json
,获取ca.crt粘贴到文件ca.crt.source
,然后执行命令cat ca.crt.source |base64 -d > ca.crt
-
获取token:通过
kubectl get secret test-sa-token-q48sd -o json
,获取token粘贴到文件token.source
,然后执行命令cat token.source |base64 -d > ./token
-
将ca.crt复制到node节点的.kube文件夹下
生成用户密码
- 在
/etc/kubernetes
目录下创建密码文件 如base_auth.csv
内容为pwd,user,user-1
- 修改
/etc/kubernetes/apiserver
,添加参数--basic-auth-file=/etc/kubernetes/basic-auth.csv
修改config文件
- 在.kube文件夹下添加config文件
apiVersion: v1
clusters:
- cluster:
certificate-authority: ca.crt # 指定证书
server: https://10.254.0.78:6443 # 指定master节点ip
name: test-cluster
contexts:
- context:
cluster: test-cluster
user: default-admin # 若不指定访问上下文的用户,则每次使用命令均需要输入账号密码
name: default-system
current-context: default-system # 指定当前的环境
users:
- name: default-admin
user:
as-user-extra: {}
password: pwd
username: user
- 在node上成功执行kubectl get pods
参考
k8s kubectl 命令自动补全
yum install -y bash-completion
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
疑问:为什么在当前master节点上不需要配置config文件即可使用kubectl
由于 kubectl 默认的 current-context 是 http://localhost:8080,该请求不需要任何验证即可
而其它节点若配置http://masterip:8080也不需要认证
但是如果配置的是https://masterip:6443 或 https://kubernets:443 则需要进行ca 或 用户 认证
kubectl的使用
根据deployment等生成 service
kubectl expose type name
type:类型如 rs rc deployment
name:rs rc 或 deployment的名称
例:kubectl expose deployment nginx-deployment-bak