바이너리 배포 Kubernetes에서 메트릭 서버를 설치할 때 발생하는 문제

ubernetes 部署 metrics-server 后 执行 kubectl top pod 或 kubectl top node 报错
Error from server (ServiceUnavailable) : 서버가 현재 요청을 처리 할 수 ​​없습니다 (get pods.metrics.k8s.io).

1. 문제 확인 단계 :

1.1. 메트릭 서버 서비스 로그보기

Cluster doesn't provide requestheader-client-ca-file in configmap/extension-apiserver-authentication in kube-system, so request-header client certificate authentication won't work.

검사 결과 metrics-server를 호출 할 권한이 없기 때문에 HTTP 403 오류가 반환되었음을 발견했습니다.

1.2. 다음 매개 변수가 구성되어 있는지 확인하십시오.

        args:
          - --cert-dir=/tmp
          - --secure-port=4443
          - --kubelet-insecure-tls=true
          - --kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,externalDNS

1.3 문제 요약 :

metrics-server 서비스 구성에는 문제가 없지만 서비스는 여전히 서버에서 오류 (ServiceUnavailable)를보고합니다. 서버가 현재 요청을 처리 할 수 ​​없습니다 (get pods.metrics.k8s.io), 해결하는 두 가지 방법이 있습니다. 문제

1. 사용자 시스템에 대한 클러스터 역할 권한 부여 : 익명

kubectl create clusterrolebinding system:anonymous  --clusterrole=cluster-admin  --user=system:anonymous

2. system : metrics-server 역할을 만들고 권한을 부여합니다.

2. 문제 해결 (시스템 : 메트릭 서버 역할 생성 및 권한 부여)

메트릭 서버 인증서 구성

# vim metrics-server-csr.json
{
  "CN": "system:metrics-server",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "BeiJing",
      "L": "BeiJing",
      "O": "k8s",
      "OU": "system"
    }
  ]
}

 

cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes metrics-server-csr.json | cfssljson -bare metrics-server

메트릭 서버 RBAC 인증 구성

cat > auth-metrics-server.yaml << EOF
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: system:auth-metrics-server-reader
  labels:
    rbac.authorization.k8s.io/aggregate-to-view: "true"
    rbac.authorization.k8s.io/aggregate-to-edit: "true"
    rbac.authorization.k8s.io/aggregate-to-admin: "true"
rules:
- apiGroups: ["metrics.k8s.io"]
  resources: ["pods", "nodes"]
  verbs: ["get", "list", "watch"]

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: metrics-server:system:auth-metrics-server
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: system:auth-metrics-server-reader
subjects:
- kind: User
  name: system:metrics-server
  namespace: kube-system
EOF

kube-apiserver는 metrics-server에 필요한 구성을 추가합니다.

--requestheader-client-ca-file=/opt/kubernetes/ssl/ca.pem \
--requestheader-allowed-names=aggregator,metrics-server \
--requestheader-extra-headers-prefix=X-Remote-Extra- \
--requestheader-group-headers=X-Remote-Group \
--requestheader-username-headers=X-Remote-User \
--proxy-client-cert-file=/opt/kubernetes/ssl/metrics-server.pem \
--proxy-client-key-file=/opt/kubernetes/ssl/metrics-server-key.pem 

모니터링 정보를 정상적으로 얻을 수 있는지 확인

 

 

추천

출처blog.csdn.net/heian_99/article/details/115137827