kubernetes 部署 traefik 以及kubernetes dashborad


前言

本來打算通過 traefik 來實現 kubernetes dashborad 的服務訪問,可是在配置過程中始終報錯。最后無奈只能通過nodeport來實現kubernetes dashborad的服務暴露。但是這並不代表着traefik沒有用,相反由於traefik能夠動態的更新kubernetes中的Pod service(我們可以理解為自動發現這些后端服務的配置變更,並重新加載服務的配置)而深受用戶歡迎。

一、traefik 簡介

1.1 簡單認識 traefik代理

Træfɪk 是一個為了讓部署微服務更加便捷而誕生的現代HTTP反向代理、負載均衡工具。 它支持多種后台 (Docker, Swarm, Kubernetes, Marathon, Mesos, Consul, Etcd, Zookeeper, BoltDB, Rest API, file…) 來自動化、動態的應用它的配置文件設置。ingress方案需要使用下列的組件:

1、反向代理負載均衡器

     負責加載 ingress control 、ingress生成的配置,並實現reload功能。
2、ingress control

      ingress Controller 實質上是個監視器,Ingress Controller 通過不斷地跟 kubernetes API 打交道,實時的獲取后端 service、pod 的變化,比如新增和減少 pod,service 增加與減少等;當得到這些變化信息后,Ingress Controller 再結合下文的 Ingress 生成配置,然后更新反向代理負載均衡器,並刷新其配置,達到服務發現的作用。
3、ingress

      ingress,就類似於互聯網應用的負載均衡器(比如Apache/nginx之類的),是kubernetes集群外訪問集群的入口,將用戶的URL請求轉發到不同的service上。其中還包括規則定義,即URL的路由信息,路由信息得的刷新由Ingress controller來提供。

參考鏈接:

http://docs.traefik.cn/basics

https://rootsongjc.gitbooks.io/kubernetes-handbook/content/practice/traefik-ingress-installation.html

1.2 部署 Træfɪk

因為我這里是作為kubernetes服務的暴露,因此你得有一個kubernetes集群。如果你沒有,可以通過kubeadm/kops等方式快速部署一個kubernetes集群,具體使用那一種方式安裝你的kubernetes集群,完全取決於你的愛好。

通過打標簽的方式來實現 traefik 到固定主機運行;

$ kubectl label nodes k8sn01 edgenode=traefik-proxy
$ kubectl label nodes k8sn02 edgenode=traefik-proxy
$ kubectl label nodes k8sn03 edgenode=traefik-proxy

下載部署 Traefik 需要的文件

$ wget https://raw.githubusercontent.com/containous/traefik/master/examples/k8s/traefik-ds.yaml
$ wget https://raw.githubusercontent.com/containous/traefik/master/examples/k8s/traefik-rbac.yaml
$ wget https://raw.githubusercontent.com/containous/traefik/master/examples/k8s/ui.yaml

對相關文件內容進行更改

$ grep -A 1 -B 3 "nodeSelector" traefik-ds.yaml 
    spec:
      serviceAccountName: traefik-ingress-controller
      terminationGracePeriodSeconds: 60 nodeSelector:
        edgenode: traefik-proxy

提示:紅色部分的功能是實現將 Traefik 部署到標簽為 "edgenode: traefik-proxy" 主機上;

$ grep -A 6 -B 2 "host" ui.yaml 
spec:
  rules:
  - host: traefik-ui.test01.com
    http:
      paths:
      - path: /
        backend:
          serviceName: traefik-web-ui
          servicePort: web

提示:根據自己環境的實際情況,將 "host" 字段改為自己的;

$ kubectl apply -f .

查看pod運行情況

$ kubectl get pod -n kube-system -o wide        
NAME                                       READY     STATUS    RESTARTS   AGE       IP                NODE
calico-kube-controllers-6696b647f7-4r5rr   1/1       Running   0          2d        172.17.80.30      k8sn02
calico-node-bd6dp                          2/2       Running   0          2d        172.17.80.26      k8sm01
calico-node-bmr66                          2/2       Running   0          2d        172.17.80.29      k8sn01
calico-node-fn6cc                          2/2       Running   0          2d        172.17.80.30      k8sn02
calico-node-pp5fg                          2/2       Running   0          2d        172.17.80.28      k8sm03
calico-node-swj8h                          2/2       Running   0          2d        172.17.80.31      k8sn03
calico-node-tkbgj                          2/2       Running   0          2d        172.17.80.27      k8sm02
coredns-6969b598c-kbt4r                    1/1       Running   0          2d        192.168.10.130    k8sm02
coredns-6969b598c-kc874                    1/1       Running   0          2d        192.168.71.1      k8sn03
heapster-5949d7bb8f-jlgtm                  1/1       Running   0          1h        192.168.63.3      k8sm01
kubernetes-dashboard-74f855c8c6-js6zz      1/1       Running   0          5h        192.168.63.2      k8sm01
traefik-ingress-controller-28mnz           1/1       Running   0          2d        192.168.17.129    k8sn02
traefik-ingress-controller-nhsrk           1/1       Running   0          2d        192.168.163.129   k8sn01
traefik-ingress-controller-qbp7s           1/1       Running   0          2d        192.168.71.2      k8sn03

Traefik 部署就完成了,我們可以通過訪問k8sn01/k8sn02/k8sn03任意一台主機,加8080端口就可以訪問到Traefik的管理界面,可以通過剛剛在ui.yaml文件中的主機名進行訪問。但是需要將這個域名解析到對應的IP或者寫入到hosts文件,效果如下所示;

 二、kubernetes dashborad 部署

將下載的 kubernetes-server-linux-amd64.tar.gz 解壓后,再解壓其中的 kubernetes-src.tar.gz 文件。dashboard 對應的目錄是:cluster/addons/dashboard。

$ cd /usr/src/kubernetes/cluster/addons/dashboard/
$ ll
total 32
-rw-rw-r-- 1 root root  264 Mar 21 03:21 dashboard-configmap.yaml
-rw-rw-r-- 1 root root 1710 Mar 21 03:21 dashboard-controller.yaml
-rw-rw-r-- 1 root root 1353 Mar 21 03:21 dashboard-rbac.yaml
-rw-rw-r-- 1 root root  551 Mar 21 03:21 dashboard-secret.yaml
-rw-rw-r-- 1 root root  322 Mar 21 03:21 dashboard-service.yaml
-rw-rw-r-- 1 root root  242 Mar 21 03:21 MAINTAINERS.md
-rw-rw-r-- 1 root root   72 Mar 21 03:21 OWNERS
-rw-rw-r-- 1 root root  400 Mar 21 03:21 README.md

這里需要將 dashboard-service.yaml 更改為如下內容:

$ cat dashboard-service.yaml 
apiVersion: v1
kind: Service
metadata:
  name: kubernetes-dashboard
  namespace: kube-system
  labels:
    k8s-app: kubernetes-dashboard
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
spec:
  type: NodePort
  selector:
    k8s-app: kubernetes-dashboard
  ports:
  - port: 443
    targetPort: 8443
    nodePort: 30000
    protocol: TCP

執行下面的命令,進行 Pod 部署

$ kubectl apply -f .

查看分配的NodePort

$ kubectl get deployment kubernetes-dashboard  -n kube-system
NAME                   DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
kubernetes-dashboard   1         1         1            1           5h
$ kubectl --namespace kube-system get pods -o wide
NAME                                       READY     STATUS    RESTARTS   AGE       IP                NODE
kubernetes-dashboard-74f855c8c6-js6zz      1/1       Running   0          5h        192.168.63.2      k8sm01.ops.bj2.yongche.com
traefik-ingress-controller-28mnz           1/1       Running   0          2d        192.168.17.129    k8sn02.ops.bj2.yongche.com
traefik-ingress-controller-nhsrk           1/1       Running   0          2d        192.168.163.129   k8sn01.ops.bj2.yongche.com
traefik-ingress-controller-qbp7s           1/1       Running   0          2d        192.168.71.2      k8sn03.ops.bj2.yongche.com
$ kubectl get services kubernetes-dashboard -n kube-system
NAME                   TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)         AGE
kubernetes-dashboard   NodePort   10.254.128.86   <none>        443:30000/TCP   5h

2.2 創建登錄 Dashboard 的 token 和 kubeconfig 配置文件

為了集群安全,從 1.7 開始,dashboard 只允許通過 https 訪問,如果使用 kube proxy 則必須監聽 localhost 或 127.0.0.1,對於 NodePort 沒有這個限制,但是僅建議在開發環境中使用。

默認情況下部署成功后可以直接訪問 https://NODE_IP:30000 訪問,但是想要登錄進去查看的話需要使用 kubeconfig 或者 access token 的方式。下面就已這兩種訪問進行訪問:

創建 access token

kubectl create sa dashboard-admin -n kube-system
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
ADMIN_SECRET=$(kubectl get secrets -n kube-system | grep dashboard-admin | awk '{print $1}')
DASHBOARD_LOGIN_TOKEN=$(kubectl describe secret -n kube-system ${ADMIN_SECRET} | grep -E '^token' | awk '{print $2}')
echo ${DASHBOARD_LOGIN_TOKEN}

使用輸出的 token 進行登錄 dashboard 即可訪問;

創建 kubeconfig 配置文件

...以后再說...

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM