<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ## 訪問集群 ### 第一次使用 kubectl 訪問 如果您是第一次訪問 Kubernetes API 的話,我們建議您使用 Kubernetes 命令行工具:`kubectl`。 為了訪問集群,您需要知道集群的地址,并且需要有訪問它的憑證。通常,如果您完成了 [入門指南](https://kubernetes.io/docs/getting-started-guides) 那么這些將會自動設置,或者其他人為您部署的集群提供并給您憑證和集群地址。 使用下面的命令檢查 kubectl 已知的集群的地址和憑證: ```bash $ kubectl config view ``` ### 直接訪問 REST API Kubectl 處理對 apiserver 的定位和認證。如果您想直接訪問 REST API,可以使用像 curl、wget 或瀏覽器這樣的 http 客戶端,有以下幾種方式來定位和認證: - 以 proxy 模式運行 kubectl。 - 推薦方法。 - 使用已保存的 apiserver 位置信息。 - 使用自簽名證書驗證 apiserver 的身份。 沒有 MITM(中間人攻擊)的可能。 - 認證到 apiserver。 - 將來,可能會做智能的客戶端負載均衡和故障轉移。 - 直接向 http 客戶端提供位置和憑據。 - 替代方法。 - 適用于通過使用代理而混淆的某些類型的客戶端代碼。 - 需要將根證書導入瀏覽器以防止 MITM。 #### 使用 kubectl proxy 以下命令作為反向代理的模式運行 kubectl。 它處理對 apiserver 的定位并進行認證。 像這樣運行: ```bash $ kubectl proxy --port=8080 & ``` 然后您可以使用 curl、wget 或者瀏覽器來訪問 API,如下所示: ```bash $ curl http://localhost:8080/api/ { "versions": [ "v1" ] } ``` #### 不使用 kubectl proxy(1.3.x 以前版本) 通過將認證 token 直接傳遞給 apiserver 的方式,可以避免使用 kubectl proxy,如下所示: ```bash $ APISERVER=$(kubectl config view | grep server | cut -f 2- -d ":" | tr -d " ") $ TOKEN=$(kubectl config view | grep token | cut -f 2 -d ":" | tr -d " ") $ curl $APISERVER/api --header "Authorization: Bearer $TOKEN" --insecure { "versions": [ "v1" ] } ``` #### 不使用 kubectl proxy(1.3.x 以后版本) 在 Kubernetes 1.3 或更高版本中,`kubectl config view` 不再顯示 token。 使用 `kubectl describe secret …` 獲取 default service account 的 token,如下所示: ```bash $ APISERVER=$(kubectl config view | grep server | cut -f 2- -d ":" | tr -d " ") $ TOKEN=$(kubectl describe secret $(kubectl get secrets | grep default | cut -f1 -d ' ') | grep -E '^token' | cut -f2 -d':' | tr -d '\t') $ curl $APISERVER/api --header "Authorization: Bearer $TOKEN" --insecure { "kind": "APIVersions", "versions": [ "v1" ], "serverAddressByClientCIDRs": [ { "clientCIDR": "0.0.0.0/0", "serverAddress": "10.0.1.149:443" } ] } ``` 以上示例使用`--insecure` 標志。 這使得它容易受到 MITM 攻擊。 當 kubectl 訪問集群時,它使用存儲的根證書和客戶端證書來訪問服務器。 (這些安裝在`~/.kube`目錄中)。 由于集群證書通常是自簽名的,因此可能需要特殊配置才能讓您的 http 客戶端使用根證書。 對于某些群集,apiserver 可能不需要身份驗證;可以選擇在本地主機上服務,或者使用防火墻保護。 對此還沒有一個標準。[配置對API的訪問](https://kubernetes.io/docs/admin/accessing-the-api) 描述了群集管理員如何配置此操作。 這種方法可能與未來的高可用性支持相沖突。 ### 編程訪問 API Kubernetes 支持 [Go](https://kubernetes.io/docs/tasks/access-application-cluster/access-cluster.md#go-client) 和 [Python](https://kubernetes.io/docs/tasks/access-application-cluster/access-cluster.md#python-client) 客戶端庫。 #### Go 客戶端 - 要獲取該庫,請運行以下命令:`go get k8s.io/client-go/<version number>/kubernetes` 請參閱 [https://github.com/kubernetes/client-go](https://github.com/kubernetes/client-go) 以查看支持哪些版本。 - 使用 client-go 客戶端編程。請注意,client-go 定義了自己的 API 對象,因此如果需要,請從 client-go 而不是從主存儲庫導入 API 定義,例如導入 `k8s.io/client-go/1.4/pkg/api/v1` 是正確的。 Go 客戶端可以使用與 kubectl 命令行工具相同的 [kubeconfig 文件](https://kubernetes.io/docs/concepts/cluster-administration/authenticate-across-clusters-kubeconfig) 來定位和驗證 apiserver。參考官方 [示例](https://git.k8s.io/client-go/examples/out-of-cluster-client-configuration/main.go) 和 [client-go 示例](../develop/client-go-sample.md)。 如果應用程序在群集中以 Pod 的形式部署,請參考 [下一節](https://kubernetes.io/docs/tasks/access-application-cluster/access-cluster.md#accessing-the-api-from-a-pod)。 #### Python 客戶端 要使用 [Python client](https://github.com/kubernetes-incubator/client-python),請運行以下命令:`pip install kubernetes`。查看 [Python 客戶端庫頁面](https://github.com/kubernetes-incubator/client-python) 獲取更多的安裝選擇。 Python 客戶端可以使用與 kubectl 命令行工具相同的 [kubeconfig 文件](https://kubernetes.io/docs/concepts/cluster-administration/authenticate-across-clusters-kubeconfig) 來定位和驗證 apiserver。參考該 [示例](https://github.com/kubernetes-incubator/client-python/tree/master/examples/example1.py)。 #### 其他語言 還有更多的客戶端庫可以用來訪問 API。有關其他庫的驗證方式,請參閱文檔。 ### 在 Pod 中訪問 API 在 Pod 中訪問 API 時,定位和認證到 API server 的方式有所不同。在 Pod 中找到 apiserver 地址的推薦方法是使用kubernetes DNS 名稱,將它解析為服務 IP,后者又將被路由到 apiserver。 向 apiserver 認證的推薦方法是使用 [service account](https://kubernetes.io/docs/user-guide/service-accounts) 憑據。通過 kube-system,pod 與 service account 相關聯,并且將該 service account 的憑據(token)放入該 pod 中每個容器的文件系統樹中,位于 `/var/run/secrets/kubernetes.io/serviceaccount/token`。 如果可用,證書包將位于每個容器的文件系統樹的 `/var/run/secrets/kubernetes.io/serviceaccount/ca.crt` 位置,并用于驗證 apiserver 的服務證書。 最后,用于 namespace API 操作的默認 namespace 放在每個容器中的 `/var/run/secrets/kubernetes.io/serviceaccount/namespace` 中。 在 pod 中,連接到 API 的推薦方法是: - 將 kubectl proxy 作為 pod 中的一個容器來運行,或作為在容器內運行的后臺進程。它將 Kubernetes API 代理到 pod 的本地主機接口,以便其他任何 pod 中的容器內的進程都可以訪問它。 - 使用 Go 客戶端庫,并使用 `rest.InClusterConfig()` 和 `kubernetes.NewForConfig()` 函數創建一個客戶端。 他們處理對 apiserver 的定位和認證。[示例](https://git.k8s.io/client-go/examples/in-cluster-client-configuration/main.go) 在以上的幾種情況下,都需要使用 pod 的憑據與 apiserver 進行安全通信。 ## 訪問集群中運行的 service 上一節是關于連接到 kubernetes API server。這一節是關于連接到 kubernetes 集群中運行的 service。在 Kubernetes 中,[node](https://kubernetes.io/docs/admin/node)、 [pod](https://kubernetes.io/docs/user-guide/pods) 和 [services](https://kubernetes.io/docs/user-guide/services) 都有它們自己的 IP。很多情況下,集群中 node 的 IP、Pod 的 IP、service 的 IP 都是不可路由的,因此在集群外面的機器就無法訪問到它們,例如從您自己的筆記本電腦。 ### 連接的方式 您可以選擇以下幾種方式從集群外部連接到 node、pod 和 service: - 通過 public IP 訪問 service。 - 使用 `NodePort` 和 `LoadBalancer` 類型的 service,以使 service 能夠在集群外部被訪問到。 - 根據您的群集環境,這可能會將服務暴露給您的公司網絡,或者可能會將其暴露在互聯網上。想想暴露的服務是否安全。它是否自己進行身份驗證? - 將 pod 放在服務后面。 要從一組副本(例如為了調試)訪問一個特定的 pod,請在 pod 上放置一個唯一的 label,并創建一個選擇該 label 的新服務。 - 在大多數情況下,應用程序開發人員不需要通過 node IP 直接訪問節點。 - 通過 Proxy 規則訪問 service、node、pod。 - 在訪問遠程服務之前,請執行 apiserver 認證和授權。 如果服務不夠安全,無法暴露給互聯網,或者為了訪問節點 IP 上的端口或進行調試,請使用這種方式。 - 代理可能會導致某些 Web 應用程序出現問題。 - 僅適用于 HTTP/HTTPS。 - [見此描述](https://kubernetes.io/docs/tasks/access-application-cluster/access-cluster.md#manually-constructing-apiserver-proxy-urls)。 - 在集群內訪問 node 和 pod。 - 運行一個 pod,然后使用 kubectl exec 命令連接到 shell。從該 shell 中連接到其他 node、pod 和 service。 - 有些集群可能允許 ssh 到集群上的某個節點。 從那個節點您可以訪問到集群中的服務。這是一個非標準的方法,它可能將在某些集群上奏效,而在某些集群不行。這些節點上可能安裝了瀏覽器和其他工具也可能沒有。群集 DNS 可能無法正常工作。 ### 訪問內置服務 通常集群內會有幾個在 kube-system 中啟動的服務。使用 `kubectl cluster-info` 命令獲取該列表: ```bash $ kubectl cluster-info Kubernetes master is running at https://104.197.5.247 elasticsearch-logging is running at https://104.197.5.247/api/v1/namespaces/kube-system/services/elasticsearch-logging/proxy kibana-logging is running at https://104.197.5.247/api/v1/namespaces/kube-system/services/kibana-logging/proxy kube-dns is running at https://104.197.5.247/api/v1/namespaces/kube-system/services/kube-dns/proxy grafana is running at https://104.197.5.247/api/v1/namespaces/kube-system/services/monitoring-grafana/proxy heapster is running at https://104.197.5.247/api/v1/namespaces/kube-system/services/monitoring-heapster/proxy ``` 這顯示了訪問每個服務的代理 URL。 例如,此集群啟用了集群級日志記錄(使用Elasticsearch),如果傳入合適的憑據,可以在該地址 `https://104.197.5.247/api/v1/namespaces/kube-system/services/elasticsearch-logging/proxy/` 訪問到,或通過 kubectl 代理,例如:`http://localhost:8080/api/v1/namespaces/kube-system/services/elasticsearch-logging/proxy/`。 (有關如何傳遞憑據和使用 kubectl 代理,請 [參閱上文](https://kubernetes.io/docs/tasks/access-application-cluster/access-cluster.md#accessing-the-cluster-api)) #### 手動構建 apiserver 代理 URL 如上所述,您可以使用 `kubectl cluster-info` 命令來檢索服務的代理 URL。要創建包含服務端點、后綴和參數的代理 URL,您只需附加到服務的代理URL: `http://`*kubernetes_master_address*`/api/v1/namespaces/`*namespace_name*`/services/`*service_name[:port_name]*`/proxy` 如果您沒有指定 port 的名字,那么您不必在 URL 里指定 port_name。 ##### 示例 - 要想訪問 Elasticsearch 的服務端點 `_search?q=user:kimchy`,您需要使用:`http://104.197.5.247/api/v1/namespaces/kube-system/services/elasticsearch-logging/proxy/_search?q=user:kimchy` - 要想訪問 Elasticsearch 的集群健康信息 `_cluster/health?pretty=true`,您需要使用:`https://104.197.5.247/api/v1/namespaces/kube-system/services/elasticsearch-logging/proxy/_cluster/health?pretty=true` ```json { "cluster_name" : "kubernetes_logging", "status" : "yellow", "timed_out" : false, "number_of_nodes" : 1, "number_of_data_nodes" : 1, "active_primary_shards" : 5, "active_shards" : 5, "relocating_shards" : 0, "initializing_shards" : 0, "unassigned_shards" : 5 } ``` #### 使用 web 瀏覽器來訪問集群中運行的服務 您可以將 apiserver 代理網址放在瀏覽器的地址欄中。 然而: - Web 瀏覽器通常不能傳遞 token,因此您可能需要使用基本(密碼)認證。 Apiserver 可以配置為接受基本認證,但您的集群可能未配置為接受基本認證。 - 某些網絡應用程序可能無法正常工作,特別是那些在不知道代理路徑前綴的情況下構造 URL 的客戶端 JavaScript。 ## 請求重定向 重定向功能已被棄用和刪除。 請改用代理(見下文)。 ## 多種代理 在使用 kubernetes 的時候您可能會遇到許多種不同的代理: 1. [kubectl 代理](https://kubernetes.io/docs/tasks/access-application-cluster/access-cluster.md#directly-accessing-the-rest-api): - 在用戶桌面或 pod 中運行 - 從 localhost 地址到 Kubernetes apiserver 的代理 - 客戶端到代理使用 HTTP - apiserver 的代理使用 HTTPS - 定位 apiserver - 添加身份驗證 header 2. [apiserver 代理](https://kubernetes.io/docs/tasks/access-application-cluster/access-cluster.md#discovering-builtin-services): - 將一個堡壘機作為 apiserver - 將群集之外的用戶連接到群集IP,否則可能無法訪問 - 在 apiserver 進程中運行 - 客戶端到代理使用 HTTPS(或 http,如果 apiserver 如此配置) - 根據代理目標的可用信息由代理選擇使用 HTTP 或 HTTPS - 可用于訪問 node、pod 或 service - 用于訪問 service 時進行負載均衡 3. [kube 代理](https://kubernetes.io/docs/user-guide/services/#ips-and-vips): - 在每個節點上運行 - 代理 UDP 和 TCP - 不支持 HTTP - 提供負載均衡 - 只是用來訪問 service 4. apiserver 前面的代理/負載均衡器: - 存在和實現因群集而異(例如 nginx) - 位于所有客戶端和一個或多個 apiserver 之間 - 作為負載均衡器,如果有多個 apiserver 5. 外部服務的云負載均衡器: - 由一些云提供商提供(例如 AWS ELB,Google Cloud Load Balancer) - 當 Kubernetes service 類型為 LoadBalancer 時,會自動創建 - 僅使用 UDP/TCP - 實施方式因云提供商而異
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看