如何暴露kubernetes度量服务器API从Pod内部卷曲?

我正在使用metric server来获取Kubernetes集群的使用情况。但是为了从主机外部使用它,我需要使用“ kubectl代理”。但是我不想这样做,因为它不打算在后台运行。我希望它可以作为服务连续运行

我如何实现这些目标

预期产量  curl clusterip:8001 / apis / metrics.k8s.io / v1beta1 / nodes

{
  "kind": "NodeMetricsList","apiVersion": "metrics.k8s.io/v1beta1","metadata": {
    "selfLink": "/apis/metrics.k8s.io/v1beta1/nodes"
  },"items": [
    {
      "metadata": {
        "name": "manhattan-master","selfLink": "/apis/metrics.k8s.io/v1beta1/nodes/manhattan-master","creationTimestamp": "2019-11-15T04:26:47Z"
      },"timestamp": "2019-11-15T04:26:33Z","window": "30s","usage": {
        "cpu": "222998424n","memory": "3580660Ki"
      }
    }
  ]

我尝试使用 LoadBalancig服务 metrics-server-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: metrics-server
  namespace: kube-system
  labels:
    kubernetes.io/name: "Metrics-server"
    kubernetes.io/cluster-service: "true"
spec:
  selector:
    k8s-app: metrics-server
  ports:
  - port: 443
    protocol: TCP
    targetPort: main-port
  externalTrafficPolicy: Local
  type: LoadBalancer

kubectl描述服务指标-master -n kube-system

[root@manhattan-master 1.8+]# kubectl describe service metrics-server -n kube-system
Name:                     metrics-server
Namespace:                kube-system
Labels:                   kubernetes.io/cluster-service=true
                          kubernetes.io/name=Metrics-server
Annotations:              kubectl.kubernetes.io/last-applied-configuration:
                            {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"kubernetes.io/cluster-service":"true","kubernetes.io/name":"Me...
Selector:                 k8s-app=metrics-server
Type:                     LoadBalancer
IP:                       10.110.223.216
Port:                     <unset>  443/TCP
TargetPort:               main-port/TCP
NodePort:                 <unset>  31043/TCP
Endpoints:                10.32.0.7:4443
Session Affinity:         None
External Traffic Policy:  Local
HealthCheck NodePort:     32208
Events:                   <none>
WOXP111 回答:如何暴露kubernetes度量服务器API从Pod内部卷曲?

这可以通过创建新服务公开Metrics Server来实现。您的Metrics Server服务应如下所示:

apiVersion: v1
kind: Service
metadata:
  labels:
    kubernetes.io/name: Metrics-server-ext
  name: metrics-server-ext
  namespace: kube-system
  selfLink: /api/v1/namespaces/kube-system/services/metrics-server
spec:
  ports:
  - port: 443
    protocol: TCP
    targetPort: https
  selector:
    k8s-app: metrics-server
  sessionAffinity: None
  type: LoadBalancer

如果您尝试访问此服务,则授权时会遇到一些问题,您需要做一些事情以提供所有必要的授权。

创建服务后,您将需要创建集群角色绑定,以便我们的服务可以访问数据:

$ kubectl create clusterrolebinding node-admin-default-svc --clusterrole=cluster-admin --serviceaccount=default:default

在运行curl命令之前,我们需要获取令牌,以便可以在curl命令上传递该令牌:

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

获取服务的外部IP:

kubectl get svc/metrics-server-ext -n kube-system -o jsonpath='{..ip}'

您的curl命令应传递令牌密钥以获取授权:

curl -k https://34.89.228.98/apis/metrics.k8s.io/v1beta1/nodes --header "Authorization: Bearer $TOKEN" --insecure

示例输出:

{
 "kind": "NodeMetricsList","apiVersion": "metrics.k8s.io/v1beta1","metadata": {
   "selfLink": "/apis/metrics.k8s.io/v1beta1/nodes"
 },"items": [
   {
     "metadata": {
       "name": "gke-lab-default-pool-993de7d7-ntmc","selfLink": "/apis/metrics.k8s.io/v1beta1/nodes/gke-lab-default-pool-993de7d7-ntmc","creationTimestamp": "2019-11-19T10:26:52Z"
     },"timestamp": "2019-11-19T10:26:17Z","window": "30s","usage": {
       "cpu": "52046272n","memory": "686768Ki"
     }
   },{
     "metadata": {
       "name": "gke-lab-default-pool-993de7d7-tkj9","selfLink": "/apis/metrics.k8s.io/v1beta1/nodes/gke-lab-default-pool-993de7d7-tkj9","timestamp": "2019-11-19T10:26:21Z","usage": {
       "cpu": "52320505n","memory": "687252Ki"
     }
   },{
     "metadata": {
       "name": "gke-lab-default-pool-993de7d7-v7m3","selfLink": "/apis/metrics.k8s.io/v1beta1/nodes/gke-lab-default-pool-993de7d7-v7m3","usage": {
       "cpu": "45602403n","memory": "609968Ki"
     }
   }
 ]
}

编辑:

由于您是在默认服务帐户中使用cluster-admin角色创建了Cluster Role Binding的,因此您也可以选择从pod中访问它。

例如,从包含curl命令的图像中创建一个容器:

$ kubectl run bb-$RANDOM --rm -i --image=ellerbrock/alpine-bash-curl-ssl --restart=Never --tty -- /bin/bash

不需要执行到pod中并运行:

$ curl -k -X GET https://kubernetes.default/apis/metrics.k8s.io/v1beta1/nodes --header "Authorization: Bearer $(cat /var/run/secrets/kubernetes.io/serviceaccount/token)" --insecure

在这里,我们以完全不同的方式传递了前面提到的同一令牌。

本文链接:https://www.f2er.com/3082182.html

大家都在问