kube-api-server的端口是多少 如何访问api

kube-api-server的端口是8080和6443,前者是http的端口,后者是https的端口,因为最近在做项目实例需要用到kuboard,在连接集群时输入要输入网址和端口号

在命名空间的kube-system命名空间里,有一个名称为kube-api-master的pod,

这个pod就是运行着kube-api-server进程,它绑定了master主机的ip地址和6443端口,但是在default命名空间下,存在一个叫kubernetes的服务,该服务对外暴露端口为443,目标端口6443,

这个服务的ip地址是clusterip地址池里面的第一个地址,同时这个服务的yaml定义里面并没有指定标签选择器,

也就是说这个kubernetes服务所对应的endpoint是手动创建的,该endpoint也是名称叫做kubernetes,该endpoint的yaml定义里面代理到master节点的6443端口,也就是kube-api-server的IP和端口。

这样一来,其他pod访问kube-api-server的整个流程就是:pod创建后嵌入了环境变量,pod获取到了kubernetes这个服务的ip和443端口,请求到kubernetes这个服务其实就是转发到了master节点上的6443端口的kube-api-server这个pod里面。

如何访问api

方法1:kube-proxy

1.集群内:
启动proxy端口9999,访问该端口将proxy到api-server

# kubectl proxy --address='178.104.163.243' --accept-hosts='^*$' --port=9999

2.集群外:

# curl http://178.104.163.243:9999/api/v1/nodes

方法2: Token

1.集群内:创建sa

kubectl create serviceaccount sa-test

2.集群内:rbac给sa赋权

将clusterrole:cluster-admin绑定给sa,该sa拥有了管理员的权限:

kubectl create clusterrolebinding sa-test-cluster-admin --clusterrole='cluster-admin' --serviceaccount=default:sa-test

3.集群内:获得token
刚创建的sa带一个secret,secret中存放了token:

TOKEN=$(kubectl get secrets -o jsonpath="{.items[?(@.metadata.annotations['kubernetes\.io/service-account\.name']=='sa-test')].data.token}"|base64 -d)

4.集群外:使用token访问API

curl --header "Authorization: Bearer $TOKEN" --insecure  -X GET https://178.104.163.38:6443/api/v1/namespaces/monitoring/pods?limit=1

方法3: 证书

要求使用apiserver的key文件和cert文件:

curl -k --key /etc/kubernetes/pki/apiserver-kubelet-client.key --cert /etc/kubernetes/pki/apiserver-kubelet-client.crt  https://178.104.163.38:6443/api/v1/nodes

参考

1.Access Clusters Using the Kubernetes API

  • 11
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值