从本地计算机访问Kubernetes API
我希望从本地机器访问Kubernetes API。我正在尝试使用kubernetes Rest API获取POD列表从本地计算机访问Kubernetes API,kubernetes,google-cloud-platform,google-kubernetes-engine,kubectl,Kubernetes,Google Cloud Platform,Google Kubernetes Engine,Kubectl,我希望从本地机器访问Kubernetes API。我正在尝试使用kubernetes Rest API获取POD列表 GET https://kubernetes.default/api/v1/namespaces/default/pods Authorization: Bearer my_access_token 我在谷歌云上创建了一个kubernetes集群和一些豆荚 在我本地的Windows机器上,我已经安装了gcloud sdk和kubectl组件。 我使用以下方式连接到群集: gcl
GET https://kubernetes.default/api/v1/namespaces/default/pods
Authorization: Bearer my_access_token
我在谷歌云上创建了一个kubernetes集群和一些豆荚
在我本地的Windows机器上,我已经安装了gcloud sdk和kubectl组件。
我使用以下方式连接到群集:
gcloud container clusters get-credentials my-cluster --region us-central1 --project my-project
我可以使用kubectl get pods
尽管如此,我还是希望使用kubernetes Rest API获取pods列表
GET https://kubernetes.default/api/v1/namespaces/default/pods
Authorization: Bearer my_access_token
但是我认为这个请求没有通过
在《邮递员》中,我得到一个错误:
错误:无法建立隧道套接字,原因=套接字挂起
或者在Python中使用请求库(从我的本地机器),我得到了错误
HTTPSConnectionPool(host='kubernetes.default',port=443):url:/api/v1/namespaces/default/pods超过了最大重试次数(由NewConnectionError引起)(':无法建立新连接:[WinError 10060]连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败,因为连接的主机没有响应。)
这里缺少什么?使用下面的kubectl命令启动Kubernetes API服务器的代理:
kubectl proxy --port=8080
Get the API versions:
curl http://localhost:8080/api/
The output should look similar to this:
{
"kind": "APIVersions",
"versions": [
"v1"
],
"serverAddressByClientCIDRs": [
{
"clientCIDR": "0.0.0.0/0",
"serverAddress": "10.0.2.15:8443"
}
]
}
使用以下kubectl命令启动Kubernetes API服务器的代理:
kubectl proxy --port=8080
Get the API versions:
curl http://localhost:8080/api/
The output should look similar to this:
{
"kind": "APIVersions",
"versions": [
"v1"
],
"serverAddressByClientCIDRs": [
{
"clientCIDR": "0.0.0.0/0",
"serverAddress": "10.0.2.15:8443"
}
]
}
端点
https://kubernetes.default
仅当您希望从集群内部(即从另一个pod)访问Kubernetes REST API时才起作用。要从Kubernetes群集外部(即从本地计算机)访问Kubernetes REST API,您需要使用外部可访问的API服务器IP或主机,即kubeconfig文件中的主机
对于从kubernetes外壳外部(即从您的本地机器)访问它,有三种方法引用文档
kubectl代理--端口=8080&
curlhttp://localhost:8080/api/v1/namespaces/default/pods
kubectl config view -o jsonpath='{"Cluster name\tServer\n"}{range .clusters[*]}{.name}{"\t"}{.cluster.server}{"\n"}{end}'
从上面的输出中选择要与之交互的群集的名称:
export CLUSTER_NAME="some_server_name"
指向引用集群名称的API服务器
APISERVER=$(kubectl config view -o jsonpath="{.clusters[?(@.name==\"$CLUSTER_NAME\")].cluster.server}")
获取令牌值
TOKEN=$(kubectl get secrets -o jsonpath="{.items[?(@.metadata.annotations['kubernetes\.io/service-account\.name']=='default')].data.token}"|base64 --decode)
使用令牌探索API
curl -X GET $APISERVER/api/v1/namespaces/default/pods --header "Authorization: Bearer $TOKEN" --insecure
pip install kubernetes
See以获取更多安装选项
Python客户端可以使用与kubectl
CLI相同的kubeconfig
文件来定位和验证API服务器。请参见此示例:
from kubernetes import client, config
config.load_kube_config()
v1=client.CoreV1Api()
print("Listing pods with their IPs:")
ret = v1.list_pod_for_all_namespaces(watch=False)
for i in ret.items:
print("%s\t%s\t%s" % (i.status.pod_ip, i.metadata.namespace, i.metadata.name))
您也可以不使用kubeconfig文件而按现在的方式执行,但这需要更多的工作,您需要使用kubeconfig文件中的kubernetes API服务器IP或主机名。端点
https://kubernetes.default
仅当您希望从集群内部(即从另一个pod)访问Kubernetes REST API时才起作用。要从Kubernetes群集外部(即从本地计算机)访问Kubernetes REST API,您需要使用外部可访问的API服务器IP或主机,即kubeconfig文件中的主机
对于从kubernetes外壳外部(即从您的本地机器)访问它,有三种方法引用文档
kubectl代理--端口=8080&
curlhttp://localhost:8080/api/v1/namespaces/default/pods
kubectl config view -o jsonpath='{"Cluster name\tServer\n"}{range .clusters[*]}{.name}{"\t"}{.cluster.server}{"\n"}{end}'
从上面的输出中选择要与之交互的群集的名称:
export CLUSTER_NAME="some_server_name"
指向引用集群名称的API服务器
APISERVER=$(kubectl config view -o jsonpath="{.clusters[?(@.name==\"$CLUSTER_NAME\")].cluster.server}")
获取令牌值
TOKEN=$(kubectl get secrets -o jsonpath="{.items[?(@.metadata.annotations['kubernetes\.io/service-account\.name']=='default')].data.token}"|base64 --decode)
使用令牌探索API
curl -X GET $APISERVER/api/v1/namespaces/default/pods --header "Authorization: Bearer $TOKEN" --insecure
pip install kubernetes
See以获取更多安装选项
Python客户端可以使用与kubectl
CLI相同的kubeconfig
文件来定位和验证API服务器。请参见此示例:
from kubernetes import client, config
config.load_kube_config()
v1=client.CoreV1Api()
print("Listing pods with their IPs:")
ret = v1.list_pod_for_all_namespaces(watch=False)
for i in ret.items:
print("%s\t%s\t%s" % (i.status.pod_ip, i.metadata.namespace, i.metadata.name))
您也可以不使用kubeconfig文件而按现在的方式进行操作,但这需要更多的工作,您需要使用kubeconfig文件中的kubernetes API服务器IP或主机名。您的API服务器地址不适合外部REST访问 像这样得到地址
kubectl config view
在列表中找到集群名称并获取APi
这是在我的本地pc上运行的cURL(没有真正的IP或令牌)
curl --location --request GET 'https://nnn.nnn.nnnn.nnn/api/v1/namespaces/develop/pods' \
--header 'Authorization: bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
如果您在POSTMAN中运行,则可能必须禁用证书验证。您的api服务器地址对于外部REST访问不正确 像这样得到地址
kubectl config view
在列表中找到集群名称并获取APi
这是在我的本地pc上运行的cURL(没有真正的IP或令牌)
curl --location --request GET 'https://nnn.nnn.nnnn.nnn/api/v1/namespaces/develop/pods' \
--header 'Authorization: bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
如果您在POSTMAN中运行,则可能必须禁用证书验证