使用 minikube 时如何访问 Kubernetes API?
How to access Kubernetes API when using minkube?
通过 kubernetes api 使用 minikube 设置 kubernetes 集群的正确方法是什么?
目前找不到可以访问kubernetes集群的端口
运行 minikube start
会自动配置 kubectl
.
您可以 运行 minikube ip
获取您的 minikube 所在的 IP。 API 服务器 运行 默认在 8443 上。
更新:要直接访问API 服务器,您需要使用已生成的自定义 SSL 证书。通过 minikube。客户端证书和密钥通常存储在:~/.minikube/apiserver.crt
和 ~/.minikube/apiserver.key
。当您发出请求时,您必须将它们加载到您的 HTTPS 客户端。
如果您使用 curl
,请使用 --cert
和 --key
选项来使用证书和密钥文件。查看 docs 了解更多详情。
Update2:客户端证书和密钥通常存储在:~/.minikube/profiles/minikube
目录,当您使用版本>=0.19
时(more informations).由于自签名证书,您可能需要为 curl 客户端设置 --insecure
选项。
使用 运行 minikube 访问 Kubernetes API 的最简单方法是使用
kubectl proxy --port=8080
然后您可以使用
访问API
curl http://localhost:8080/api/
这还允许您在浏览器中浏览 API。使用
启动 minikube
minikube start --extra-config=apiserver.Features.EnableSwaggerUI=true
然后启动 kubectl proxy
,并在浏览器中导航至 http://localhost:8080/swagger-ui/。
您可以使用curl直接使用
访问Kubernetes API
curl --cacert ~/.minikube/ca.crt --cert ~/.minikube/client.crt --key ~/.minikube/client.key https://`minikube ip`:8443/api/
但通常这样做并没有什么好处。普通浏览器对 minikube 生成的证书不满意,所以如果你想用你的浏览器访问 API,你需要使用 kubectl proxy
.
我看了很多答案,但很多都是错的。
在我们这样做之前,我们需要 IP 和令牌。
如何获取IP: minikube ip
如何生成令牌:
$export secret=kubectl get serviceaccount default -o json | jq -r '.secrets[].name'
$kubectl get secret $secret -o yaml | grep "token:" | awk {'print '} | base64 -D > token
注意:base64 使用 -D 表示 mac,但 -d 表示 Linux。
那么,正确的命令是:
#curl -v -k -H --cacert ~/.minikube/ca.crt -H "Authorization: Bearer $(cat ~/YOUR_TOKEN)" "https://{YOUR_IP}:8443/api/v1/pods"
这些说明对我有用https://github.com/jenkinsci/kubernetes-plugin#configuration-on-minikube
需要生成和上传 pfx 文件,以及那里提到的其他步骤。
以上大部分答案在他们自己的意义上都是正确的。
我会给出我的答案版本:
1) 通过 Kubernetes API 使用 minikube 设置 Kubernetes 集群的正确方法是什么?
回答:我认为这很简单。按照minikube installation
官方k8s文档中提到的安装步骤
2) 目前找不到可以访问kubernetes集群的端口
Ans:这个回答太直接了。您必须检查您的 Kube 配置文件。您可以在主目录 ~/.kube/config
中找到它。查看此文件,它将包含详细信息。
apiVersion: v1
clusters:
- cluster:
certificate-authority: /Users/username/.minikube/ca.crt
server: https://192.168.64.2:8443
name: minikube
contexts:
- context:
cluster: minikube
namespace: default
user: minikube
name: minikube
current-context: minikube
kind: Config
preferences: {}
users:
- name: minikube
user:
client-certificate: /Users/username/.minikube/client.crt
client-key: /Users/username/.minikube/client.key
这里提到的 server
细节是您要点击的 api-server
端点。
您可以使用 kubectl
命令查看此信息,也可以像这样 kubectl config view
使用下面的 curl 来点击 api-server
使用 curl
curl https://192.168.64.2:8443/api/v1/pod --key /Users/sanjay/.minikube/client.key --cert /Users/sanjay/.minikube/client.crt --cacert /Users/sanjay/.minikube/ca.crt
注:replace the ip port and the path as per your config file in above command
.
用户 Sven Marnach 让我朝着正确的方向前进,但是为了获得正确的服务器 ip、crt 和密钥位置,我 运行 kubectl config view
.
$ kubectl config view
apiVersion: v1
clusters:
- cluster:
certificate-authority: /Users/user/.minikube/ca.crt
server: https://127.0.0.1:32792
name: minikube
contexts:
- context:
cluster: minikube
user: minikube
name: minikube
current-context: minikube
kind: Config
preferences: {}
users:
- name: minikube
user:
client-certificate: /Users/user/.minikube/profiles/minikube/client.crt
client-key: /Users/user/.minikube/profiles/minikube/client.key
$ curl --cacert ~/.minikube/ca.crt --cert ~/.minikube/profiles/minikube/client.crt --key ~/.minikube/profiles/minikube/client.key https://127.0.0.1:32792/api/
{
"kind": "APIVersions",
"versions": [
"v1"
],
"serverAddressByClientCIDRs": [
{
"clientCIDR": "0.0.0.0/0",
"serverAddress": "172.17.0.2:8443"
}
]
}
$ curl -s --cacert ~/.minikube/ca.crt --cert ~/.minikube/profiles/minikube/client.crt --key ~/.minikube/profiles/minikube/client.key https://127.0.0.1:32792/api/v1/pods | jq .items[].metadata | jq '"\(.name), \(.namespace), \(.selfLink)"'
"shell-demo, default, /api/v1/namespaces/default/pods/shell-demo"
"coredns-f9fd979d6-6b2nx, kube-system, /api/v1/namespaces/kube-system/pods/coredns-f9fd979d6-6b2nx"
"etcd-minikube, kube-system, /api/v1/namespaces/kube-system/pods/etcd-minikube"
"kube-apiserver-minikube, kube-system, /api/v1/namespaces/kube-system/pods/kube-apiserver-minikube"
"kube-controller-manager-minikube, kube-system, /api/v1/namespaces/kube-system/pods/kube-controller-manager-minikube"
"kube-proxy-bbck9, kube-system, /api/v1/namespaces/kube-system/pods/kube-proxy-bbck9"
"kube-scheduler-minikube, kube-system, /api/v1/namespaces/kube-system/pods/kube-scheduler-minikube"
"storage-provisioner, kube-system, /api/v1/namespaces/kube-system/pods/storage-provisioner"
读者可能也对link感兴趣。
对于 windows 用户,这里有一个替代更简单的 kubectl proxy
命令的方法:
使用“minikube mount [path-to-folder]:/host
安装本地主机的 .minikube
文件夹。这样,您就可以从 node.If 中访问证书不知道此文件夹的确切路径,您可以通过查看 kubectl config view
响应来获取它。
在不同的命令提示符下,记下您的 kube api 服务器的 IP。这可以通过您的主机 (windows) 运行 minikube ip
完成。请注意,这是您的 minikube 容器中的虚拟 IP。
在 minikube 容器中启动一个 bash。 docker exec -it {your-container-id} bash
访问您在第 1) 点安装的文件夹。现在,只需从 2.):
通过它的虚拟 ip curl 到 Kubectl api 服务器
curl https://{your-ip-from-2}:8443/api --key ./ca.key --cert ./ca.crt
在这里,我们正在传递要使用的证书。请注意我是如何不使用代理客户端的。
就是这样。出于学习目的,我认为这是一种更有趣的直接代理方法。
通过 kubernetes api 使用 minikube 设置 kubernetes 集群的正确方法是什么? 目前找不到可以访问kubernetes集群的端口
运行 minikube start
会自动配置 kubectl
.
您可以 运行 minikube ip
获取您的 minikube 所在的 IP。 API 服务器 运行 默认在 8443 上。
更新:要直接访问API 服务器,您需要使用已生成的自定义 SSL 证书。通过 minikube。客户端证书和密钥通常存储在:~/.minikube/apiserver.crt
和 ~/.minikube/apiserver.key
。当您发出请求时,您必须将它们加载到您的 HTTPS 客户端。
如果您使用 curl
,请使用 --cert
和 --key
选项来使用证书和密钥文件。查看 docs 了解更多详情。
Update2:客户端证书和密钥通常存储在:~/.minikube/profiles/minikube
目录,当您使用版本>=0.19
时(more informations).由于自签名证书,您可能需要为 curl 客户端设置 --insecure
选项。
使用 运行 minikube 访问 Kubernetes API 的最简单方法是使用
kubectl proxy --port=8080
然后您可以使用
访问APIcurl http://localhost:8080/api/
这还允许您在浏览器中浏览 API。使用
启动 minikubeminikube start --extra-config=apiserver.Features.EnableSwaggerUI=true
然后启动 kubectl proxy
,并在浏览器中导航至 http://localhost:8080/swagger-ui/。
您可以使用curl直接使用
访问Kubernetes APIcurl --cacert ~/.minikube/ca.crt --cert ~/.minikube/client.crt --key ~/.minikube/client.key https://`minikube ip`:8443/api/
但通常这样做并没有什么好处。普通浏览器对 minikube 生成的证书不满意,所以如果你想用你的浏览器访问 API,你需要使用 kubectl proxy
.
我看了很多答案,但很多都是错的。
在我们这样做之前,我们需要 IP 和令牌。
如何获取IP: minikube ip 如何生成令牌:
$export secret=kubectl get serviceaccount default -o json | jq -r '.secrets[].name'
$kubectl get secret $secret -o yaml | grep "token:" | awk {'print '} | base64 -D > token
注意:base64 使用 -D 表示 mac,但 -d 表示 Linux。
那么,正确的命令是:
#curl -v -k -H --cacert ~/.minikube/ca.crt -H "Authorization: Bearer $(cat ~/YOUR_TOKEN)" "https://{YOUR_IP}:8443/api/v1/pods"
这些说明对我有用https://github.com/jenkinsci/kubernetes-plugin#configuration-on-minikube
需要生成和上传 pfx 文件,以及那里提到的其他步骤。
以上大部分答案在他们自己的意义上都是正确的。
我会给出我的答案版本:
1) 通过 Kubernetes API 使用 minikube 设置 Kubernetes 集群的正确方法是什么?
回答:我认为这很简单。按照minikube installation
官方k8s文档中提到的安装步骤2) 目前找不到可以访问kubernetes集群的端口
Ans:这个回答太直接了。您必须检查您的 Kube 配置文件。您可以在主目录 ~/.kube/config
中找到它。查看此文件,它将包含详细信息。
apiVersion: v1
clusters:
- cluster:
certificate-authority: /Users/username/.minikube/ca.crt
server: https://192.168.64.2:8443
name: minikube
contexts:
- context:
cluster: minikube
namespace: default
user: minikube
name: minikube
current-context: minikube
kind: Config
preferences: {}
users:
- name: minikube
user:
client-certificate: /Users/username/.minikube/client.crt
client-key: /Users/username/.minikube/client.key
这里提到的 server
细节是您要点击的 api-server
端点。
您可以使用 kubectl
命令查看此信息,也可以像这样 kubectl config view
使用下面的 curl 来点击 api-server
使用 curl
curl https://192.168.64.2:8443/api/v1/pod --key /Users/sanjay/.minikube/client.key --cert /Users/sanjay/.minikube/client.crt --cacert /Users/sanjay/.minikube/ca.crt
注:replace the ip port and the path as per your config file in above command
.
用户 Sven Marnach 让我朝着正确的方向前进,但是为了获得正确的服务器 ip、crt 和密钥位置,我 运行 kubectl config view
.
$ kubectl config view
apiVersion: v1
clusters:
- cluster:
certificate-authority: /Users/user/.minikube/ca.crt
server: https://127.0.0.1:32792
name: minikube
contexts:
- context:
cluster: minikube
user: minikube
name: minikube
current-context: minikube
kind: Config
preferences: {}
users:
- name: minikube
user:
client-certificate: /Users/user/.minikube/profiles/minikube/client.crt
client-key: /Users/user/.minikube/profiles/minikube/client.key
$ curl --cacert ~/.minikube/ca.crt --cert ~/.minikube/profiles/minikube/client.crt --key ~/.minikube/profiles/minikube/client.key https://127.0.0.1:32792/api/
{
"kind": "APIVersions",
"versions": [
"v1"
],
"serverAddressByClientCIDRs": [
{
"clientCIDR": "0.0.0.0/0",
"serverAddress": "172.17.0.2:8443"
}
]
}
$ curl -s --cacert ~/.minikube/ca.crt --cert ~/.minikube/profiles/minikube/client.crt --key ~/.minikube/profiles/minikube/client.key https://127.0.0.1:32792/api/v1/pods | jq .items[].metadata | jq '"\(.name), \(.namespace), \(.selfLink)"'
"shell-demo, default, /api/v1/namespaces/default/pods/shell-demo"
"coredns-f9fd979d6-6b2nx, kube-system, /api/v1/namespaces/kube-system/pods/coredns-f9fd979d6-6b2nx"
"etcd-minikube, kube-system, /api/v1/namespaces/kube-system/pods/etcd-minikube"
"kube-apiserver-minikube, kube-system, /api/v1/namespaces/kube-system/pods/kube-apiserver-minikube"
"kube-controller-manager-minikube, kube-system, /api/v1/namespaces/kube-system/pods/kube-controller-manager-minikube"
"kube-proxy-bbck9, kube-system, /api/v1/namespaces/kube-system/pods/kube-proxy-bbck9"
"kube-scheduler-minikube, kube-system, /api/v1/namespaces/kube-system/pods/kube-scheduler-minikube"
"storage-provisioner, kube-system, /api/v1/namespaces/kube-system/pods/storage-provisioner"
读者可能也对link感兴趣。
对于 windows 用户,这里有一个替代更简单的 kubectl proxy
命令的方法:
使用“
minikube mount [path-to-folder]:/host
安装本地主机的.minikube
文件夹。这样,您就可以从 node.If 中访问证书不知道此文件夹的确切路径,您可以通过查看kubectl config view
响应来获取它。在不同的命令提示符下,记下您的 kube api 服务器的 IP。这可以通过您的主机 (windows) 运行
minikube ip
完成。请注意,这是您的 minikube 容器中的虚拟 IP。在 minikube 容器中启动一个 bash。
docker exec -it {your-container-id} bash
访问您在第 1) 点安装的文件夹。现在,只需从 2.):
通过它的虚拟 ip curl 到 Kubectl api 服务器curl https://{your-ip-from-2}:8443/api --key ./ca.key --cert ./ca.crt
在这里,我们正在传递要使用的证书。请注意我是如何不使用代理客户端的。
就是这样。出于学习目的,我认为这是一种更有趣的直接代理方法。