使用minkube时如何访问Kubernetes API?

jljoyd4f  于 2022-11-28  发布在  Kubernetes
关注(0)|答案(8)|浏览(218)

通过kubernetes api使用minikube设置kubernetes集群的正确方法是什么?目前,我找不到可以访问kubernetes集群的端口。

7z5jn7bk

7z5jn7bk1#

在运行minikube时,通过访问Kubernetes API的最简单方法是使用

kubectl proxy --port=8080

然后,您可以使用以下命令访问API

curl http://localhost:8080/api/

这也允许您在浏览器中浏览API。

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

sdnqo3pr

sdnqo3pr2#

运行minikube start将自动配置kubectl
你可以运行minikube ip来获取minikube所在的IP地址,API服务器默认运行在8443上。

    • 更新**:要直接访问API服务器,您需要使用minikube生成的自定义SSL证书。客户端证书和密钥通常存储在:~/.minikube/apiserver.crt~/.minikube/apiserver.key。当您发出请求时,必须将它们加载到HTTPS客户端。

如果您使用curl,请使用--cert--key选项来使用证书和密钥文件。有关详细信息,请查看docs

    • 更新2**:客户端证书和密钥通常存储在以下位置:~/.minikube/profiles/minikube目录中的--insecure选项。由于自签名证书的原因,您可能需要将--insecure选项设置为curl客户端。
lhcgjxsq

lhcgjxsq3#

我试过很多答案,但很多都是错的。
在此之前,我们需要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 $2'} |  base64 -D > token

注意:base64在mac上使用-D,但在Linux上使用-d。
那么,正确的命令是:

#curl -v -k -H --cacert ~/.minikube/ca.crt -H "Authorization: Bearer $(cat ~/YOUR_TOKEN)"  "https://{YOUR_IP}:8443/api/v1/pods"
dpiehjr4

dpiehjr44#

用户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感兴趣。

rggaifut

rggaifut5#

对于windows用户,下面是一个更简单的kubectl proxy命令的替代方法:
1.使用“minikube mount [path-to-folder]:/host挂载本地主机的.minikube文件夹。这样,您就可以从节点中访问证书。如果您不知道该文件夹的确切路径,可以通过查看kubectl config view响应来获取。
1.在另一个命令提示符下,记下kube api服务器的IP地址。这可以从你的主机(windows)minikube ip上运行来完成。注意,这是minikube容器中的虚拟IP地址。
1.在minikube容器中开始一个bash。docker exec -it {your-container-id} bash
1.访问您在第1)点挂载的文件夹。现在,只需从第2点通过Kubectl api服务器的虚拟ip curl 到该服务器即可。):
curl https://{your-ip-from-2}:8443/api --key ./ca.key --cert ./ca.crt这里我们传递要使用的证书。注意我没有使用代理-客户端证书。
就这样,为了学习的目的,我认为这是一个比直接代理更有趣的方法。

nbysray5

nbysray56#

这些说明对我很有效https://github.com/jenkinsci/kubernetes-plugin#configuration-on-minikube
需要生成和上传pfx文件,沿着其他步骤提到那里。

mhd8tkvw

mhd8tkvw7#

以上答案,大部分在其本身的意义上是正确的。
我将给出我的版本的答案:
1)通过Kubernetes API使用minikube设置Kubernetes集群的正确方法是什么?
答:我认为这是非常直接的。按照官方k8s文档中提到的minikube installation的安装步骤操作
2)目前,我找不到可以访问kubernetes集群的端口。
答:这也是一个直接的答案。你必须检查你的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使用下面的curl击中api-server

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

1zmg4dgp

1zmg4dgp8#

根据上面xichen和Seba的回答,下面是从终端获取令牌的方法:

$ function get_token() { secret=$(kubectl get serviceaccount "$1" -o jsonpath='{.secrets[0].name}') &&  kubectl get secret "$secret" -o jsonpath='{.data.token}' | base64 --decode; }
$ get_token target_account

我希望这将是有用的那些谁必须使用kubectl低于1.24,由于minikube的问题,使入口,如本question所述。

相关问题