<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Kubernetes Dashboard 與 LDAP 的集成

          共 13721字,需瀏覽 28分鐘

           ·

          2020-08-19 07:03

          本文展示了如何使用 Apache 來集成 LDAP 進行 Kubernetes Dashboard 的身份認證,本文使用的系統(tǒng)為 Ubuntu 20、Kubernetes 1.18 版本,單節(jié)點集群,主節(jié)點 IP 地址為 192.168.15.200,LDAP 的 IP 地址為 192.168.15.10。

          集群安裝

          主節(jié)點安裝

          安裝所需軟件包的列表。

          $ apt-get update$ apt-get install apt-transport-https wget gnupg ntpdate curl mlocate

          安裝 Docker 服務(wù)。

          $ apt-get install docker.io

          設(shè)置開機啟動。

          $ systemctl enable docker.service

          編輯 Docker 服務(wù)配置文件。

          $ updatedb$ locate docker.service$ vi /etc/systemd/system/multi-user.target.wants/docker.service

          在啟動的項(EXECSTART)末尾添加以下配置:

          --exec-opt native.cgroupdriver=systemd

          下面是配置之前的文件。

          [Unit]Description=Docker Application Container EngineDocumentation=https://docs.docker.comBindsTo=containerd.serviceAfter=network-online.target firewalld.service containerd.serviceWants=network-online.targetRequires=docker.socket[Service]Type=notifyExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sockExecReload=/bin/kill -s HUP $MAINPIDTimeoutSec=0RestartSec=2Restart=alwaysStartLimitBurst=3StartLimitInterval=60sLimitNOFILE=infinityLimitNPROC=infinityLimitCORE=infinityTasksMax=infinityDelegate=yesKillMode=process[Install]WantedBy=multi-user.target

          下面是配置后的文件。

          [Unit]Description=Docker Application Container EngineDocumentation=https://docs.docker.comBindsTo=containerd.serviceAfter=network-online.target firewalld.service containerd.serviceWants=network-online.targetRequires=docker.socket[Service]Type=notifyExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --exec-opt native.cgroupdriver=systemdExecReload=/bin/kill -s HUP $MAINPIDTimeoutSec=0RestartSec=2Restart=alwaysStartLimitBurst=3StartLimitInterval=60sLimitNOFILE=infinityLimitNPROC=infinityLimitCORE=infinityTasksMax=infinityDelegate=yesKillMode=process[Install]WantedBy=multi-user.target

          然后創(chuàng)建系統(tǒng)配置文件。

          $ vi /etc/sysctl.d/k8s.conf

          這是文件內(nèi)容。

          net.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1net.ipv4.ip_forward = 1

          然后啟用系統(tǒng)配置文件。

          $ sysctl --system

          然后編輯如下 modules 配置文件,在文件末尾添加以下配置:

          $ vi /etc/modules-load.d/modules.conf# 文件末尾添加下面的配置overlaybr_netfilter

          編輯 FSTAB 配置文件并禁用交換內(nèi)存。

          $ vi /etc/fstab# 注釋掉 swap 的配置/dev/disk/by-uuid/a24f00e7-918a-4a05-b4c9-35bdef750fb4 / ext4 defaults 0 0# /swap.img       none    swap    sw      0       0

          設(shè)置一個唯一的主機名。

          $ hostnamectl set-hostname kubernetes-01.local

          創(chuàng)建文件來配置所需的環(huán)境變量。

          $ vi /etc/profile.d/kubernetes.sh# 文件內(nèi)容如下所示#!/bin/bashexport KUBECONFIG=/etc/kubernetes/admin.conf# 然后重啟節(jié)點$ reboot

          然后配置 Kubernetes 軟件源:

          # 國內(nèi)用戶可以自行配置阿里云的軟件源$ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add# 添加官方的存儲庫$ apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"# 安裝 Kubernetes 軟件包$ apt-get update$ apt-get install kubeadm kubectl kubelet

          提前下載所需的鏡像:

          # 國內(nèi)用戶自行配置可訪問的鏡像源$ kubeadm config images pull# 命令輸出為[config/images] Pulled k8s.gcr.io/kube-apiserver:v1.18.6[config/images] Pulled k8s.gcr.io/kube-controller-manager:v1.18.6[config/images] Pulled k8s.gcr.io/kube-scheduler:v1.18.6[config/images] Pulled k8s.gcr.io/kube-proxy:v1.18.6[config/images] Pulled k8s.gcr.io/pause:3.2[config/images] Pulled k8s.gcr.io/etcd:3.4.3-0[config/images] Pulled k8s.gcr.io/coredns:1.6.7

          然后初始化 Kubernetes 集群:

          $ kubeadm init --pod-network-cidr=10.244.0.0/16# 命令輸出為Your Kubernetes control-plane has initialized successfully!
          To start using your cluster, you need to run the following as a regular user:
          mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
          You should now deploy a pod network to the cluster.Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at: https://kubernetes.io/docs/concepts/cluster-administration/addons/
          Then you can join any number of worker nodes by running the following on each as root:
          kubeadm join 192.168.100.9:6443 --token l7fezg.2nm80pvehn2f2bbz \ --discovery-token-ca-cert-hash sha256:6dfc8c80e8e125c6d4d79ec82ea64deb0dcfa0a4bda33e16a8a9fa93794e3aae

          安裝上面的提示執(zhí)行下面的命令:

          $ mkdir -p $HOME/.kube$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config$ sudo chown $(id -u):$(id -g) $HOME/.kube/config

          接著安裝所需的網(wǎng)絡(luò)插件:

          $ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/2140ac876ef134e0ed5af15c65e414cf26827915/Documentation/kube-flannel.yml

          默認情況下,不允許 Kubernetes 主節(jié)點運行普通的 Pod,我們可以執(zhí)行下面的命令移除污點來解決,因為我們這里的示例只是一個單節(jié)點的 Kubernetes 集群:

          $ kubectl taint nodes --all node-role.kubernetes.io/master-

          安裝 Dashboard

          安裝所需的軟件包:

          $ apt-get update$ apt-get install wget curl mlocate

          下載要部署的 YAML 資源清單文件:

          $ mkdir /downloads$ cd /downloads$ wget https://raw.githubusercontent.com/kubernetes/dashboard/master/aio/deploy/recommended.yaml

          直接安裝 Dashboard:

          $ kubectl create -f recommended.yaml

          安裝完成后為 Dashboard 創(chuàng)建一個 ServiceAccount 帳號,并綁定 cluster-admin 集群角色:


          $ kubectl create serviceaccount apache-proxy -n kube-system$ kubectl create clusterrolebinding apache-proxy --clusterrole=cluster-admin --serviceaccount=kube-system:apache-proxy

          然后獲取 Apache 代理 ServiceAccount 對應(yīng)的 Token 密鑰:

          $ kubectl get secrets --all-namespaces | grep -E "NAME|apache"NAMESPACE              NAME                                             TYPE                                  DATA   AGEkube-system            apache-proxy-token-8gk9p                         kubernetes.io/service-account-token   3      39s# 獲取 TOKEN 值$ kubectl describe -n kube-system secret apache-proxy-token-8gk9pName:         apache-proxy-token-8gk9pNamespace:    kube-systemLabels:       Annotations:  kubernetes.io/service-account.name: apache-proxy              kubernetes.io/service-account.uid: e07884b4-282c-4ef1-8662-e2a3eaf3c448
          Type: kubernetes.io/service-account-token
          Data====ca.crt: 1025 bytesnamespace: 11 bytestoken: eyJhbGciOiJSUzI1NiIsImtpZCI6InhrMHFrdEdYQ1gxVlRqZjBpN1hxdEgwaTlRRENMWmhUdC1IMC13OTgyM28ifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhcGFjaGUtcHJveHktdG9rZW4tOGdrOXAiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiYXBhY2hlLXByb3h5Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiZTA3ODg0YjQtMjgyYy00ZWYxLTg2NjItZTJhM2VhZjNjNDQ4Iiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmFwYWNoZS1wcm94eSJ9.qKzSvCYOqDfvJ1S9W4-nEzZScmGwjYsi3g5df542_aDyZRugbiWbFmjrBTB70tDwuGTeupbPmS3ptweyjbb_7K5VbSk-2zCazgNeiCZ_q7M4yXgPi6rNYNiBX9pQEBaBQCWgH8-VVFGe34xrLR88cv9YNLfH9ZzrdJf2jPEBhptvdVKr6Ljpbhz-4P-mr5_IRsru_72wsRRZZptL80ARp6PkPdrYIQZ3bMQNsq3GEWxMl8SRPVqEuvVXykxfEt1Hx5URwtiwh_MLEZ5ClCIuGsGs8fWQhCLm_l0SY6p9B2DmU-XhhT_HjuotDI3pm2p5pJb9WmO4dMLx_NsBnLSz_Q

          上面的 token 值就是需要的數(shù)據(jù)。然后獲取訪問 Dashboard Service 的 ClusterIP 地址:

          $ kubectl get Service -n kubernetes-dashboardNAME                        TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGEdashboard-metrics-scraper   ClusterIP   10.99.244.167   <none>        8000/TCP   20mkubernetes-dashboard        ClusterIP   10.107.55.24    <none>        443/TCP    20m

          在我們的示例中,Dashboard 使用 TCP 端口 443 和 IP 地址 10.107.55.24,如果你本地不能訪問到 ClusterIP,則可以將 Dashboard 更改為 NodePort 類型進行訪問。

          使用 Apache 進行身份驗證

          接下來安裝 Apache 來對 Dashboard 進行身份驗證。首先在節(jié)點上安裝 Apache:

          $ apt-get update$ apt-get install apache2 apache2-utils openssl

          啟用所需的 Apache 模塊:

          a2enmod authnz_ldapa2enmod ssla2enmod rewritea2enmod headersa2enmod proxya2enmod proxy_http

          編輯 Apache 配置文件:

          $ vi /etc/apache2/apache2.conf# 在文件末尾添加如下信息AllowOverride All

          然后使用 OpenSSL 命令創(chuàng)建私鑰和證書:

          $ mkdir /etc/apache2/certificate$ cd /etc/apache2/certificate$ openssl req -new -newkey rsa:4096 -x509 -sha256 -days 365 -nodes -out apache-certificate.crt -keyout apache.key# 輸入請求的信息Generating a RSA private key............++++.......................................................++++writing new private key to 'apache.key'-----You are about to be asked to enter information that will be incorporatedinto your certificate request.What you are about to enter is what is called a Distinguished Name or a DN.There are quite a few fields but you can leave some blankFor some fields there will be a default value,If you enter '.', the field will be left blank.-----Country Name (2 letter code) [AU]:CNState or Province Name (full name) [Some-State]:ChengDuLocality Name (eg, city) []:Organization Name (eg, company) [Internet Widgits Pty Ltd]:TechExpertOrganizational Unit Name (eg, section) []:Common Name (e.g. server FQDN or YOUR name) []:192.168.15.200Email Address []:

          Common Name 選項上輸入 IP 地址或者主機名,我們這里的示例 IP 地址就是 192.168.15.200。

          使用格式 PEM 將現(xiàn)有的 Kubernetes 代理證書及其密鑰轉(zhuǎn)換為單個文件:

          $ cat /etc/kubernetes/pki/front-proxy-client.crt /etc/kubernetes/pki/front-proxy-client.key > /etc/apache2/certificate/front-proxy-client.pem

          然后修改默認網(wǎng)站的 Apache 配置文件:

          $ vi /etc/apache2/sites-enabled/000-default.conf# 做如下配置 *:80>        RewriteEngine On        RewriteCond %{HTTPS} !=on        RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R=301,L] *:443>        ServerAdmin webmaster@localhost        DocumentRoot /var/www/html        ErrorLog ${APACHE_LOG_DIR}/error.log        CustomLog ${APACHE_LOG_DIR}/access.log combined        SSLEngine on        SSLCertificateFile /etc/apache2/certificate/apache-certificate.crt        SSLCertificateKeyFile /etc/apache2/certificate/apache.key        SSLProxyEngine On        SSLProxyVerify none        SSLProxyCheckPeerCN off        SSLProxyCheckPeerName off        SSLProxyCheckPeerExpire off        SSLProxyCACertificateFile /etc/kubernetes/pki/ca.crt        SSLProxyMachineCertificateFile /etc/apache2/certificate/front-proxy-client.pem        RequestHeader set Authorization "Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6InhrMHFrdEdYQ1gxVlRqZjBpN1hxdEgwaTlRRENMWmhUdC1IMC13OTgyM28ifQ.eyJpc3MiOiJrdWJ cm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm hbWUiOiJhcGFjaGUtcHJveHktdG9rZW4tOGdrOXAiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiYXBhY2hlLXByb3h5Iiwia3ViZXJuZXRlcy5pby9zZ J2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiZTA3ODg0YjQtMjgyYy00ZWYxLTg2NjItZTJhM2VhZjNjNDQ4Iiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmFw WNoZS1wcm94eSJ9.qKzSvCYOqDfvJ1S9W4-nEzZScmGwjYsi3g5df542_aDyZRugbiWbFmjrBTB70tDwuGTeupbPmS3ptweyjbb_7K5VbSk-2zCazgNeiCZ_q7M4yXgPi6rNYNiBX9pQEBaBQCWgH8-VVF e34xrLR88cv9YNLfH9ZzrdJf2jPEBhptvdVKr6Ljpbhz-4P-mr5_IRsru_72wsRRZZptL80ARp6PkPdrYIQZ3bMQNsq3GEWxMl8SRPVqEuvVXykxfEt1Hx5URwtiwh_MLEZ5ClCIuGsGs8fWQhCLm_l0SY p9B2DmU-XhhT_HjuotDI3pm2p5pJb9WmO4dMLx_NsBnLSz_Q" />        AuthType Basic        AuthName "Secure area - Authentication required"        AuthBasicAuthoritative Off        AuthBasicProvider ldap        AuthLDAPURL "ldap://192.168.15.10/CN=Users,DC=tech,DC=local?sAMAccountName?sub?(objectClass=*)"        AuthLDAPBindDN "[email protected]"        AuthLDAPBindPassword kamisama123..        AuthLDAPGroupAttribute member        Require ldap-group CN=KUBERNETES-ADMIN,CN=Users,DC=TECH,DC=LOCAL        ProxyPass  https://10.107.55.24:443/        ProxyPassReverse  https://10.107.55.24:443/

          將名為 AuthLDAPURL 的配置項的 IP 地址更改為 LDAP 的 IP 地址,根據(jù)你自己的 LDAP 環(huán)境進行相應(yīng)的配置,將名為 PROXYPASSPROXYPASSREVERSE 的配置項的 IP 地址更改為 Dashboard 的 ClusterIP 地址。將名為 REQUESTHEADER 的配置項的 Token 值更改為以前創(chuàng)建的 Apache ServiceAccount 的 Token 值。

          在示例中,我們使用自簽名證書啟用了 HTTPS。

           *:443>SSLEngine onSSLCertificateFile /etc/apache2/certificate/apache-certificate.crtSSLCertificateKeyFile /etc/apache2/certificate/apache.key

          此外我們還配置了 LDAP 身份驗證的信息:

          AuthType BasicAuthName "Secure area - Authentication required"AuthBasicAuthoritative OffAuthBasicProvider ldapAuthLDAPURL "ldap://192.168.15.10/CN=Users,DC=tech,DC=local?sAMAccountName?sub?(objectClass=*)"AuthLDAPBindDN "[email protected]"AuthLDAPBindPassword kamisama123..AuthLDAPGroupAttribute memberRequire ldap-group CN=KUBERNETES-ADMIN,CN=Users,DC=TECH,DC=LOCAL

          Apache 將代理用戶與 Dashboard 在集群中的 ClusterIP 之間進行 HTTPS 通信:

          ProxyPass  https://10.107.55.24:443/ProxyPassReverse  https://10.107.55.24:443/

          Apache 將使用在 Kubernetes 服務(wù)器安裝期間自動創(chuàng)建的證書和密鑰對 Dashboard 執(zhí)行相互 TLS 身份驗證:

          SSLProxyEngine OnSSLProxyVerify noneSSLProxyCheckPeerCN offSSLProxyCheckPeerName offSSLProxyCheckPeerExpire offSSLProxyCACertificateFile /etc/kubernetes/pki/ca.crtSSLProxyMachineCertificateFile /etc/apache2/certificate/front-proxy-client.pem

          此外 Apache 服務(wù)器還將向發(fā)送到 Dashboard 的所有數(shù)據(jù)包添加 Header 頭信息,用來配置 Token 信息:

          RequestHeader set Authorization "Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6InhrMHFrdEdYQ1gxVlRqZjBpN1hxdEgwaTlRRENMWmhUdC1IMC13OTgyM28ifQ.eyJpc3MiOiJrdWJ cm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm hbWUiOiJhcGFjaGUtcHJveHktdG9rZW4tOGdrOXAiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiYXBhY2hlLXByb3h5Iiwia3ViZXJuZXRlcy5pby9zZ J2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiZTA3ODg0YjQtMjgyYy00ZWYxLTg2NjItZTJhM2VhZjNjNDQ4Iiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmFw WNoZS1wcm94eSJ9.qKzSvCYOqDfvJ1S9W4-nEzZScmGwjYsi3g5df542_aDyZRugbiWbFmjrBTB70tDwuGTeupbPmS3ptweyjbb_7K5VbSk-2zCazgNeiCZ_q7M4yXgPi6rNYNiBX9pQEBaBQCWgH8-VVF e34xrLR88cv9YNLfH9ZzrdJf2jPEBhptvdVKr6Ljpbhz-4P-mr5_IRsru_72wsRRZZptL80ARp6PkPdrYIQZ3bMQNsq3GEWxMl8SRPVqEuvVXykxfEt1Hx5URwtiwh_MLEZ5ClCIuGsGs8fWQhCLm_l0SY p9B2DmU-XhhT_HjuotDI3pm2p5pJb9WmO4dMLx_NsBnLSz_Q"

          此外 Apache 還會將 HTTP 用戶重定向到 HTTPS :

              RewriteEngine On    RewriteCond %{HTTPS} !=on    RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R=301,L]

          最后配置完成后,我們可以重新啟動 Apache 服務(wù):

          $ service apache2 restart

          配置完成后我們就可以在瀏覽器中訪問 Apache 服務(wù)器的 IP 地址,我們這里在瀏覽器中輸入https://192.168.15.200即可,Apache 服務(wù)器會要求執(zhí)行用戶身份驗證。

          登錄成功后,就可以正常使用 Kubernetes Dashboard 了:

          Apache 代理將自動使用名為"AUTH HEADER"的功能在 Kubernetes Dashboard 上執(zhí)行身份驗證。

          到這里我們就成功完成了使用 Apache 作為 Kubernetes Dashboard 的代理配置。

          ?

          原文鏈接:https://techexpert.tips/kubernetes/kubernetes-dashboard-ldap-authentication/




          K8S進階訓(xùn)練營,點擊下方圖片了解詳情

          瀏覽 119
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  韩国精品无码一区二区三区18 | 婷婷激情丁香五月 | 伊人久久青青 | 91香蕉在线视频 | 亚洲操逼图片 |