在 Kubernetes

支援的版本

  • Instana 支援現行穩定版本的 Kubernetes。 如果 Kubernetes 的現行穩定版本是 1.26,則 Kubernetes 感應器會固定至 1.24版。 根據 Kubernetes 版本相容性保證, Instana 支援 Kubernetes 1.22 版至 1.26版。 不過,該範圍中的最低 2 個版本會被視為軟淘汰。

安裝方法

您可以使用數種可用的方法,將 Instana 代理程式安裝至 Kubernetes 叢集。 如果您手動在主機上安裝代理程式,則只會監視容器及處理程序,而不會收集 Kubernetes 資料。 建議您使用 操作器來安裝代理程式。 替代方法為 Helm ChartYAML 檔案 (DaemonSet) 部署。

選擇適當的安裝方法

將 Instana 代理程式部署至 Kubernetes 叢集的建議方式是使用 操作器Helm Chart 部署作為替代方案。 這兩種方式都使用所有可用的配置選項,例如 向多個後端報告 等。 這將為您提供完整控制,甚至啟用靜態 YAML 檔案中無法使用的部分選項。 所有可用的選項都 詳細說明 Helm 圖表 ,這些說明以相同方式套用至操作器 CRD。

YAML 檔案 安裝適用於快速部署,雖然當代理程式在 Kubernetes 叢集中執行時,它沒有 Instana 代理程式提供的所有可用配置選項。 如果您不需要將進一步自訂作業套用至 Instana 代理程式,並依賴手動 kubectl 處理,請選擇 YAML 安裝方法。

安裝方法的現行版本

新版 Operator、 Helm Chart 和 YAML 檔案的發行頻率很高。 若要保持最新的修正程式、改進及新增特性更新,請確保您執行的是 Operator、 Helm Chart 或 YAML 檔案的現行版本。

若要尋找 Operator、 Helm Chart 或 YAML 檔案的現行版本,請參閱下列主題:

使用操作器進行安裝

Instana 提供 Kubernetes 操作器來安裝及管理 Instana 代理程式。

如需您可以使用 Instana 代理程式自訂資源定義及環境變數來設定的配置選項,請參閱 操作器配置

必要條件

附註: 若要自動從 Instana 代理程式操作器 1.x 版升級 Instana 代理程式 CRD ,需要下列必要條件:

  • 從操作器 1.x 版自動 CRD 升級取決於 3rd cert-manager 操作器,該操作器必須存在於叢集中。 如需如何適當地安裝及配置 cert-manager 操作器,請參閱 cert-manager 文件
  • 您必須先將 Instana 代理程式升級至 2.0.9版,其中包括將現有代理程式 CR 轉換成新格式的 Webhook 轉換。 在 2.0.9版之後移除此 Webhook。 完成轉換之後,您可以將 Instana 代理程式重新升級至較新的版本。

手動安裝操作器

  1. 如下所示部署操作器。 將安裝最新的操作器,且不會升級 1.x CRD:

    kubectl apply -f https://github.com/instana/instana-agent-operator/releases/latest/download/instana-agent-operator.yaml
    

    現在,操作器應該在名稱空間 instana-agent中啟動並執行,並等待建立 instana-agent 自訂資源。 請注意, instana-agent-operator.yaml 的每一個舊版 1.x.x 將參照相同版本的 instana/instana-agent-operator 儲存器映像檔。 不再支援 DockerHub 及「 Red Hat 登錄」中 Instana Agent Operator 映像檔的 latest 標籤。 若要取得 Instana Agent Operator 的新版本,您需要從 Operator 的 GitHub Releases 頁面 更新至最新的操作器 yaml ,如前所述。

  2. 登入 Instana 使用者介面,然後按一下 其他 > 代理程式 > 安裝 Instana 代理程式 > Kubernetes

  3. 技術 清單中,選取 操作員。 此頁面提供您在下列步驟 4 中編輯自訂資源 yaml 檔案所需的基本配置值。

  4. 遵循 此 YAML 範本來建立自訂資源 YAML 檔。

    1. 編輯範本並至少取代下列值:

      • agent.key 必須使用您的 Instana 代理程式金鑰來設定。

      • agent.endpointHost 必須使用 主機代理程式端點來設定。

      • agent.endpointPort主機代理程式端點的埠,且值通常是 "443" (以引號括住)。

      • 需要使用 Instana 中所顯示 Kubernetes 叢集的名稱來設定 cluster.name

      • 需要使用 Instana 中所顯示 Kubernetes 叢集的名稱來設定 zone.name

      • agent.env (選用) 可用來指定代理程式的環境變數,例如指定代理程式的 Proxy 配置。 如需其他可能的環境值,請參閱 代理程式配置。 範例如下:

        spec:
            agent:
              env:
                INSTANA_AGENT_TAGS: staging
        
      • agent.configuration_yaml 可用來指定 configuration.yaml 配置檔。 請參閱下列範例:

        spec:
            agent:
              configuration_yaml: |
                # Example of configuration yaml template
                # Host
                com.instana.plugin.host:
                  tags:
                    - 'dev'
                    - 'app1'
        

        如果您需要調整 configuration.yaml,請在 這裡檢視文件。

    2. 如果您想要部署靜態主機代理程式,則需要使用靜態代理程式映像檔來配置自訂資源 YAML 檔。 若要列出靜態主機代理程式映像檔,請將 agent.image.name 設為 containers.instana.io/instana/release/agent/static。 請參閱下列範例:

      spec:
       agent:
         image:
           name: containers.instana.io/instana/release/agent/static
      
    3. 套用已編輯的自訂資源:

      kubectl apply -f instana-agent.customresource.yaml
      

    操作器會從自訂資源中挑選配置,並部署 Instana 代理程式。

解除安裝主機代理程式

  1. 移除自訂資源,以解除安裝 Instana 主機代理程式:

    kubectl delete -f instana-agent.customresource.yaml
    
  2. 執行下列指令來解除安裝操作器:

    kubectl delete -f https://github.com/instana/instana-agent-operator/releases/latest/download/instana-agent-operator.yaml
    

操作員配置

自訂資源值

Instana 代理程式自訂資源支援與 Instana Helm 圖表完全相同的配置。 如需所有配置參數的詳細清單,請參閱 Helm Chart 配置

設定代理程式端點的 TLS 加密

TLS 加密有兩種新增方式。 可以提供現有密鑰,也可以使用憑證和私密金鑰。

使用現有密鑰

您可以使用 kubernetes.io/tls 類型的現有密鑰來進行 TLS 加密。 但是必須在自訂資源 yaml 檔案中提供 agent.tls.secretName

提供憑證和私密金鑰

在另一端,可以使用憑證和私密金鑰。 憑證和私密金鑰必須以 base64-encoded。

若要使用此變式,請將下列兩個參數新增至自訂資源 yaml 檔案:

  • agent.tls.certificate
  • agent.tls.key

附註: 如果設定 agent.tls.secretName ,則會忽略 agent.tls.certificateagent.tls.key

使用 Helm 圖表進行安裝

透過 DaemonSet, Helm 圖表會將 Instana 代理程式新增至叢集中的所有可排程節點。

  1. 登入 Instana ,按一下 其他-> 代理程式-> 安裝 Instana 代理程式-> Kubernetes

    從這個頁面中,您將需要 主機代理程式端點代理程式金鑰

  2. 技術 清單中,選取 Helm 圖表

  3. 輸入叢集名稱及 (選擇性地) 代理程式區域。

    叢集名稱 (INSTANA_KUBERNETES_CLUSTER_NAME) 是此 DaemonSet 所監視之叢集的自訂名稱。

    代理程式區域 (INSTANA_ZONE) 用來 自訂基礎架構地圖上顯示的區域分組

    所有其他必要參數都會預先移入。

  4. 使用 Helm 3 執行下列指令。 若要配置安裝,請使用 --set 旗標在指令行上指定值,或使用 -f 旗標向 yaml 檔案提供您的值。

    附註: 如果您想要部署靜態主機代理程式,請在 helm 安裝指令中設定旗標 —set agent.image.name=containers.instana.io/instana/release/agent/static

    kubectl create namespace instana-agent && \
    helm install instana-agent --namespace instana-agent \
    --repo https://agents.instana.io/helm \
    --set agent.key='<your agent key - as described above>' \
    --set agent.endpointHost='<your host agent endpoint - as described above>' \
    --set cluster.name='<your-cluster-name>' \
    --set zone.name='<your-cluster-name>' \
    instana-agent
    

    如需所有配置參數的詳細清單,請參閱我們的 Instana Helm 圖表

設定代理程式端點的 TLS 加密

TLS 加密有兩種新增方式。 可以提供現有密鑰,也可以在安裝期間使用憑證和私密金鑰。

使用現有密鑰

可以使用 kubernetes.io/tls 類型的現有密鑰。 在使用 --set 'agent.tls.secretName=<YOUR_SECRET_NAME>'進行安裝期間,必須只提供 secretName 。 然後,提供的密鑰中的檔案將包括在代理程式中。

提供憑證和私密金鑰

在另一端,可以在安裝期間新增憑證及私密金鑰。 憑證和私密金鑰必須以 base64 編碼。

若要使用此變式,請使用下列其他參數來執行 helm install :

--set 'agent.tls.certificate=<YOUR_CERTIFICATE_BASE64_ENCODED>'
--set 'agent.tls.key=<YOUR_PRIVATE_KEY_BASE64_ENCODED>'

如果設定 agent.tls.secretName ,則會忽略 agent.tls.certificateagent.tls.key

Instana 代理程式服務

附註: 本節中說明的功能隨 Instana 代理程式 Helm Chart v1.2.7 及更高版本提供,並且需要 Kubernetes 1.17 及更高版本。

Helm Chart 具有稱為 --set service.create=true的特殊配置選項。 此選項會建立 Kubernetes Service ,以向叢集公開下列項目:

解除安裝主機代理程式

若要解除安裝使用 Helm Chart 安裝的 Instana 主機代理程式,請執行下列指令:

helm uninstall instana-agent

然後,會移除與主機代理程式相關的所有資源。

安裝為 DaemonSet

若要將 Instana 代理程式安裝並配置為 Kubernetes 叢集內的 DaemonSet ,請自訂 instana-agent.yaml 檔案,以建立在其中建立 DaemonSet 的 instana-agent 名稱空間。 這可讓您標記代理程式以快速識別,或透過刪除名稱空間來停止所有代理程式。

  1. 登入 Instana ,按一下 其他-> 代理程式-> 安裝 Instana 代理程式-> Kubernetes

  2. 技術 清單中,選取 DaemonSet

  3. 輸入 叢集 名稱及 (選擇性地) 代理程式區域

    叢集名稱 (INSTANA_KUBERNETES_CLUSTER_NAME) 是此 DaemonSet 所監視之叢集的自訂名稱。

    代理程式區域 (INSTANA_ZONE) 用來 自訂基礎架構地圖上顯示的區域分組 。 它也會設定叢集的預設名稱。

    所有其他必要參數都會預先移入。

  4. 按一下 複製 並儲存 YAML 檔案。

  5. 編輯 YAML 檔案,將下列空懸錨點取代為實際值:

    • *agentKey: base64 編碼的 Instana 金鑰,代表應將產生的資料傳送至其中的叢集

      echo YOUR_INSTANA_AGENT_KEY | base64
      
    • *endpointHost: 與安裝相關聯的 IP 位址或主機名稱。

    • *endpointPort: 與安裝相關聯的網路埠。

    • *clusterName: 要指派給 Instana 中叢集的名稱。

    • *zoneName: 要與叢集的節點相關聯的 代理程式區域

  6. 若要在 Kubernetes 叢集內安裝 Instana ,請執行下列指令:

    kubectl apply -f instana-agent.yaml
    

    附註: 您對 instana-agent.yaml 所做的任何其他編輯都需要重建 DaemonSet 。 若要套用變更,請執行下列指令:

    kubectl delete -f instana-agent.yaml
    kubectl apply -f instana-agent.yaml
    

RBAC

若要在已啟用 RBAC 的情況下部署 Kubernetes 1.8 之前的版本,請將 rbac.authorization.k8s.io/v1 取代為 RBAC API 版本的 rbac.authorization.k8s.io/v1beta1

若要授與使用者建立授權角色的能力 (例如在 GKE 中) ,請執行下列指令:

kubectl create clusterrolebinding cluster-admin-binding \
--clusterrole cluster-admin --user $(gcloud config get-value account)

如果您未啟用 RBAC ,則需要從 instana-agent.yaml 檔案中移除 ClusterRoleClusterRoleBinding

PodSecurity原則

若要啟用 Instana 代理程式的 PodSecurityPolicy ,請執行下列動作:

  1. 建立 PodSecurityPolicy 資源,如 Helm Chart中所定義。
  2. instana-agent ClusterRole授權 該原則。 請注意,必須使用上述 instana-agent.yaml 檔案中定義的 ClusterRoleClusterRoleBinding 資源來啟用 RBAC。
  3. 在叢集上 啟用 PodSecurityPolicy 許可控制器 。 對於現有叢集,建議在啟用許可控制器之前新增並授權原則。

Pod 安全許可

Instana 主機代理程式需要 privileged Pod 安全標準。 若要使用內建 Pod 安全許可控制器施行 Pod 安全標準,請執行下列指令:

kubectl label --overwrite ns instana-agent pod-security.kubernetes.io/enforce=privileged

檢查主機代理程式的狀態

安裝主機代理程式之後,您可以在 Instana 使用者介面或主機上檢查主機代理程式的狀態。 如需相關資訊,請參閱 檢查主機代理程式的狀態

配置受監視應用程式的網路存取權

部分類型的應用程式需要先聯繫代理程式。 目前是

  • Node.js
  • Go
  • Ruby
  • Python
  • .NET Core

那些應用程式需要知道代理程式正在接聽哪個 IP。 由於代理程式將自動在主機 IP 上接聽,請使用下列 Downward API Snippet ,將它在環境變數中傳遞至應用程式 Pod:

spec:
  containers:
    env:
      - name: INSTANA_AGENT_HOST
        valueFrom:
          fieldRef:
            fieldPath: status.hostIP

監視主要節點

依預設,代理程式不會在 Kubernetes 主節點上進行排程,因為部署遵循在大部分主節點上設定的預設污點 node-role.kubernetes.io/master:NoSchedule 。 若要改寫這些,請將下列容錯新增至代理程式 daemonset:

kind: DaemonSet
metadata:
  name: instana-agent
  namespace: instana-agent
spec:
  template:
  ...
    spec:
      tolerations:
        - key: "node-role.kubernetes.io/master"
          effect: "NoSchedule"
          operator: "Exists"
    ...

如需更直接的控制,請 個別在主要節點上安裝代理程式 。 如需您環境的建議,請聯絡 支援中心

監視 Kubernetes NGINX 進入

如需如何配置 Kubernetes NGINX Ingress 及代理程式以擷取 NGINX 度量值的準則,請參閱 監視 NGINX 頁面。 也可以透過 OpenTracing 專案來追蹤 Kubernetes NGINX Ingress ,請參閱 NGINX Ingress 的分散式追蹤 ,以瞭解如何設定該準則。

密鑰

Kubernetes 具有 內建支援 ,可用來儲存及管理機密性資訊。 不過,如果您未使用該內建功能,但仍然需要在 Kubernetes 資源中編寫機密資料的能力,則代理程式密碼配置會延伸以支援該功能。

若要對選取的 Kubernetes 資源 (特別是註釋及儲存器環境變數) 啟用機密資料編寫,請將 INSTANA_KUBERNETES_REDACT_SECRETS 環境變數設為 true ,如下列代理程式 yaml Snippet 中所示:

spec:
  containers:
      env:
        - name: INSTANA_KUBERNETES_REDACT_SECRETS
          value: "true"

然後,依照 代理程式密鑰配置中的說明,將代理程式配置成符合所需的密鑰清單。

請務必注意,啟用此功能可能會導致 Kubernetes 感應器中的效能降低。

報告至多個後端

若要啟用從 Kubernetes 代理程式向多個後端產生報告,請參閱 Docker 代理程式配置

Instana 代理程式安全考量

由於 Instana 代理程式需要連接至應用程式 Pod ,並在部署它的節點上的橋接器網路上列出/開啟自己的埠,因此它需要主機網路存取權及主機層次程序 ID 查閱,以取得基礎架構相關性。 這相當於 permissions granted on Linux & Unix 主機環境,且需要在 DaemonSet 部署中設定下列旗標:

  • privileged: true 提供 /proc 的完整存取權 (不含套版)、變更 JVM 連接的 UID/GID ,以及存取應用程式名稱空間。
  • hostPID: true/proc中提供基礎架構相關性所需的主機層次 PID。
  • hostNetwork: true 提供對主機層次及橋接器網路介面的存取權。

此外,部署至 OpenShift時,安全環境定義限制 (SCC) 將設為 privileged ,以授與上述許可權。

Kubernetes 感應器需要下列叢集角色規則,以偵測在 Kubernetes 叢集中執行的所有資源及應用程式,並確定其受正確監視:

rules:
  - nonResourceURLs:
    - "/version"
    - "/healthz"
    verbs: ["get"]- apiGroups: ["batch"]
    resources:
      - "jobs"
      - "cronjobs"
    verbs: ["get", "list", "watch"]
  - apiGroups: ["extensions"]
    resources:
      - "deployments"
      - "replicasets"
      - "ingresses"
    verbs: ["get", "list", "watch"]
  - apiGroups: ["apps"]
    resources:
      - "deployments"
      - "replicasets"
      - "daemonsets"
      - "statefulsets"
    verbs: ["get", "list", "watch"]
  - apiGroups: [""]
    resources:
      - "namespaces"
      - "events"
      - "services"
      - "endpoints"
      - "nodes"
      - "pods"
      - "replicationcontrollers"
      - "componentstatuses"
      - "resourcequotas"
      - "persistentvolumes"
      - "persistentvolumeclaims"
    verbs: ["get", "list", "watch"]
  - apiGroups: [""]
    resources:
      - "endpoints"
    verbs: ["create", "update", "patch"]
  - apiGroups: ["networking.k8s.io"]
    resources:
      - "ingresses"
    verbs: ["get", "list", "watch"]

YAML 檔案範例

一般 instana-agent.yaml 檔可以從 Instana 公用 GitHub 儲存庫下載。 它會以一般預設值從 Helm 圖表 呈現。 個別內容定義為下一個步驟中佈置的空懸錨點。

下載此檔案 ,並檢視最新的 變更日誌