는 Kubernetes 대시 보드 배포

는 Kubernetes 대시 보드는 완전히 명령 줄 도구 (kubectl 등)을 대체하기위한 클러스터 관리는 Kubernetes 모든 기능을 웹 인터페이스, UI의 방법입니다.

디렉토리

  1. 배포
  2. 사용자 만들기
  3. 통합 Heapster
  4. 액세스

배포

대시 보드는 사용할 필요 k8s.gcr.io/kubernetes-dashboard때문에 네트워크 이유로, 거울, 그리고 여기에 사용되는 태그 주소 YAML 이미지 파일을 미리 풀을 재생하거나 수정할 수 있습니다 :

kubectl apply -f http://mirror.faasx.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml

YAML는 것을 제외하고는 위에서 사용 https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml k8s.gcr.io의 교체 reg.qiniu.com/k8s을 .

그런 다음 사용할 수있는 kubectl get pods배치 상태를 볼 수 명령을 :

kubectl get pods --all-namespaces

# 输出
NAMESPACE     NAME                                      READY     STATUS    RESTARTS   AGE
kube-system   kubernetes-dashboard-7d5dcdb6d9-mf6l2     1/1       Running   0          9m

로컬 대시 보드에 액세스하려면, 우리는 다음 명령을 실행, 보안 채널을 생성해야합니다 :

kubectl proxy

이제 당신이 할 수있는하여 HTTP : 8001 / API / V1 / 네임 스페이스 / KUBE 시스템 / 서비스 / HTTPS ::는 Kubernetes - 대시 보드 : / 프록시 / // localhost를 Dashborad UI에 액세스 할 수 있습니다.

K8S-대시 보드 로그인

사용자 만들기

위와 같이, 우리가 먼저 사용자를 생성, 로그인 페이지로 이동 :

1. 서비스 계정 만들기

첫째, 이름이 생성 admin-user서비스 계정 및 배치 kube-system네임 스페이스 아래 :

# admin-user.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kube-system

실행 kubectl create명령을 :

kubectl create -f admin-user.yaml

2. 바인딩 역할

기본적으로, kubeadm클러스터가 만들어졌습니다 만들 때 admin역할을, 우리는 직접 바인딩 :

# admin-user-role-binding.yaml
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kube-system

실행 kubectl create명령을 :

kubectl create -f  admin-user-role-binding.yaml

3. 액세스 토큰

이제 우리는 새로운 대시 보드에 로그인하기 위해 만든 사용자의 토큰을 찾을 필요가 :

kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')

출력과 유사하기 :

Name:         admin-user-token-qrj82
Namespace:    kube-system
Labels:       <none>
Annotations:  kubernetes.io/service-account.name=admin-user
              kubernetes.io/service-account.uid=6cd60673-4d13-11e8-a548-00155d000529

Type:  kubernetes.io/service-account-token

Data
====
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLXFyajgyIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiI2Y2Q2MDY3My00ZDEzLTExZTgtYTU0OC0wMDE1NWQwMDA1MjkiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06YWRtaW4tdXNlciJ9.C5mjsa2uqJwjscWQ9x4mEsWALUTJu3OSfLYecqpS1niYXxp328mgx0t-QY8A7GQvAr5fWoIhhC_NOHkSkn2ubn0U22VGh2msU6zAbz9sZZ7BMXG4DLMq3AaXTXY8LzS3PQyEOCaLieyEDe-tuTZz4pbqoZQJ6V6zaKJtE9u6-zMBC2_iFujBwhBViaAP9KBbE5WfREEc0SQR9siN8W8gLSc8ZL4snndv527Pe9SxojpDGw6qP_8R-i51bP2nZGlpPadEPXj-lQqz4g5pgGziQqnsInSMpctJmHbfAh7s9lIMoBFW7GVE8AQNSoLHuuevbLArJ7sHriQtDB76_j4fmA
ca.crt:     1025 bytes
namespace:  11 bytes

그런 다음 로그인 화면의 입력 상자에 토큰 토큰을 복사, 기호는 다음과 같습니다 :

K8S-개요

통합 Heapster

Heapster는 컨테이너 클러스터 모니터링 및 성능 분석 도구, 기본 지원는 Kubernetes CoreOS입니다.

Heapster이 예에서 사용되는 저장하는 다양한 방법을 지원하며 influxdb, 다음 명령을 직접 실행할 수는 :

kubectl create -f http://mirror.faasx.com/kubernetes/heapster/deploy/kube-config/influxdb/influxdb.yaml
kubectl create -f http://mirror.faasx.com/kubernetes/heapster/deploy/kube-config/influxdb/grafana.yaml
kubectl create -f http://mirror.faasx.com/kubernetes/heapster/deploy/kube-config/influxdb/heapster.yaml
kubectl create -f http://mirror.faasx.com/kubernetes/heapster/deploy/kube-config/rbac/heapster-rbac.yaml

위의 명령에서 YAML을 사용 https://github.com/kubernetes/heapster/tree/master/deploy/kube-config/influxdb 복사 및 k8s.gcr.io국내 거울에 대한 수정했습니다.

그런 다음, 포드 상태를 보면 :

raining@raining-ubuntu:~/k8s/heapster$ kubectl get pods --namespace=kube-system
NAME                                      READY     STATUS    RESTARTS   AGE
...
heapster-5869b599bd-kxltn                 1/1       Running   0          5m
monitoring-grafana-679f6b46cb-xxsr4       1/1       Running   0          5m
monitoring-influxdb-6f875dc468-7s4xz      1/1       Running   0          6m
...

하는 상태까지 기다린 Running다음과 같이 브라우저를 새로 고침, 최신 결과는 다음과 같습니다

K8S-heapsterng

: 더 자세한 사용법을 위해 Heapster은 공식 문서를 참조 https://github.com/kubernetes/heapster .

액세스

는 Kubernetes 서비스에 액세스 할 수있는 다음과 같은 네 가지 방법을 제공합니다 :

kubectl 프록시

위의 예에서, 우리는 사용하십시오 kubectl proxy, 그것은 단지 로컬 액세스에서 (그 기계를 시작하는), 기본적으로 기계와는 Kubernetes의 API 사이의 프록시를 만듭니다.

우리는 사용할 수있는 kubectl cluster-info클러스터와 같은 액세스 할 수 있는지 여부, 구성이 올바른지 확인하는 명령을 :

raining@raining-ubuntu:~$ kubectl cluster-info
Kubernetes master is running at https://192.168.0.8:6443
Heapster is running at https://192.168.0.8:6443/api/v1/namespaces/kube-system/services/heapster/proxy
KubeDNS is running at https://192.168.0.8:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
monitoring-grafana is running at https://192.168.0.8:6443/api/v1/namespaces/kube-system/services/monitoring-grafana/proxy
monitoring-influxdb is running at https://192.168.0.8:6443/api/v1/namespaces/kube-system/services/monitoring-influxdb/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

브로커가 단순히 다음 명령을 실행 시작

$ kubectl proxy
Starting to serve on 127.0.0.1:8001

우리는 또한 사용할 수 있습니다 --address--accept-hosts매개 변수는 외부 액세스를 허용하도록 :

kubectl proxy --address='0.0.0.0'  --accept-hosts='^*$'

然后我们在外网访问http://<master-ip>:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/,可以成功访问到登录界面,但是却无法登录,这是因为Dashboard只允许localhost127.0.0.1使用HTTP连接进行访问,而其它地址只允许使用HTTPS。因此,如果需要在非本机访问Dashboard的话,只能选择其他访问方式。

NodePort

NodePort是将节点直接暴露在外网的一种方式,只建议在开发环境,单节点的安装方式中使用。

启用NodePort很简单,只需执行kubectl edit命令进行编辑:

kubectl -n kube-system edit service kubernetes-dashboard

输出如下:

apiVersion: v1
kind: Service
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"k8s-app":"kubernetes-dashboard"},"name":"kubernetes-dashboard","namespace":"kube-system"},"spec":{"ports":[{"port":443,"targetPort":8443}],"selector":{"k8s-app":"kubernetes-dashboard"}}}
  creationTimestamp: 2018-05-01T07:23:41Z
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kube-system
  resourceVersion: "1750"
  selfLink: /api/v1/namespaces/kube-system/services/kubernetes-dashboard
  uid: 9329577a-4d10-11e8-a548-00155d000529
spec:
  clusterIP: 10.103.5.139
  ports:
  - port: 443
    protocol: TCP
    targetPort: 8443
  selector:
    k8s-app: kubernetes-dashboard
  sessionAffinity: None
  type: ClusterIP
status:
  loadBalancer: {}

然后我们将上面的type: ClusterIP修改为type: NodePort,保存后使用kubectl get service命令来查看自动生产的端口:

kubectl -n kube-system get service kubernetes-dashboard

输出如下:

NAME                   TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)         AGE
kubernetes-dashboard   NodePort   10.103.5.139   <none>        443:31795/TCP   4h

如上所示,Dashboard已经在31795端口上公开,现在可以在外部使用https://<cluster-ip>:31795进行访问。需要注意的是,在多节点的集群中,必须找到运行Dashboard节点的IP来访问,而不是Master节点的IP,在本文的示例,我部署了两台服务器,MatserIP为192.168.0.8,ClusterIP为192.168.0.10

但是最后访问的结果可能如下:

K8S-대시 보드 nodeport-notsecure

遗憾的是,由于证书问题,我们无法访问,需要在部署Dashboard时指定有效的证书,才可以访问。由于在正式环境中,并不推荐使用NodePort的方式来访问Dashboard,故不再多说,关于如何为Dashboard配置证书可参考:Certificate management

API Server

如果Kubernetes API服务器是公开的,并可以从外部访问,那我们可以直接使用API Server的方式来访问,也是比较推荐的方式。

Dashboard的访问地址为:
https://<master-ip>:<apiserver-port>/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/,但是返回的结果可能如下:

{
  "kind": "Status",
  "apiVersion": "v1",
  "metadata": {
    
  },
  "status": "Failure",
  "message": "services \"https:kubernetes-dashboard:\" is forbidden: User \"system:anonymous\" cannot get services/proxy in the namespace \"kube-system\"",
  "reason": "Forbidden",
  "details": {
    "name": "https:kubernetes-dashboard:",
    "kind": "services"
  },
  "code": 403
}

K8S의 최신 버전이 기본 RBAC으로 사용하고, 인증되지 않은 사용자에 대한 기본 ID를 부여하기 때문입니다 anonymous.

API 서버의 경우, 인증에 대한 인증서의 사용, 우리는 인증서를 작성해야합니다 :

1. 첫째, 발견 kubectl으로, 기본적으로 명령 설정 파일 /etc/kubernetes/admin.conf에서 이전 , 우리가 복사 한 $HOME/.kube/config.

2. 그럼 우리가 사용 client-certificate-data하고 client-key-data생성 P12의 파일을, 다음 명령을 사용합니다 :

# 生成client-certificate-data
grep 'client-certificate-data' ~/.kube/config | head -n 1 | awk '{print $2}' | base64 -d >> kubecfg.crt

# 生成client-key-data
grep 'client-key-data' ~/.kube/config | head -n 1 | awk '{print $2}' | base64 -d >> kubecfg.key

# 生成p12
openssl pkcs12 -export -clcerts -inkey kubecfg.key -in kubecfg.crt -out kubecfg.p12 -name "kubernetes-client"

3. 마지막으로 P12 파일 가져 오기는 다음과 같습니다, 브라우저를 다시 열고, 위의 생성 :

K8S-API-서버 선택 인증서

확인을 클릭, 당신은 익숙한 로그인 화면을 볼 수 있습니다 :

K8S-API - 서버 로그인

우리는 만들 처음을 사용할 수 있습니다 admin-user, 로그인하는 모든 확인을 사용자 토큰을.

다른 사용자가 다른 네임 스페이스에 액세스 할 수 있기 때문에 생산 시스템의 경우, 우리는 각 사용자에 대한 자신의 인증서를 생성해야한다.

입구

침투 오픈 소스 리버스 프록시 부하 분산 K8S의 통합 (등의 Nginx, 아파치, Haproxy, 등), 동적 Nginx의 구성을 업데이트 할 수 있습니다 등등, 서비스를 노출 더 유연하고 더 권장되는 방법이지만, 상대적으로 복잡하고 나중에 소개했다.

추천

출처blog.csdn.net/rubbertree/article/details/91042142