【问题标题】:Enable Istio automatic injection only for specified pods within a namespace仅为命名空间中的指定 pod 启用 Istio 自动注入
【发布时间】:2020-05-16 17:25:59
【问题描述】:

我们在集群中设置并运行了 Istio,默认情况下启用自动注入,并在少数命名空间中启用。现在我们想对其他一些命名空间中的一些pod进行自动注入,但是遇到了一个问题,如果没有为整个命名空间启用,似乎不可能对指定的pod进行自动注入。我们使用 Argo 工作流自动创建 Pod,因此我们在 Argo 工作流中指定 sidecar.istio.io/inject: "true",以便生成的 Pod 在其元数据中显示带有此注释:

...
metadata:
  annotations:
    sidecar.istio.io/inject: "true"
...

不幸的是,Istio 仍然不会注入 sidecar,除非命名空间的 istio-injection 标签显式设置为 enabled,从而将 sidecar 添加到在那里运行的所有 pod。

我们也不能使用手动注入,因为 Pod 是由 Argo 服务自动创建的,并且我们希望 Sidecar 仅根据工作流定义注入特定的 Pod。

那么有什么方法可以解决这个问题吗?谢谢!

完整的 Argo 工作流程:

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: presto-sql-pipeline-
  annotations: {pipelines.kubeflow.org/kfp_sdk_version: 0.5.1, pipelines.kubeflow.org/pipeline_compilation_time: '2020-05-16T16:07:29.173967',
    pipelines.kubeflow.org/pipeline_spec: '{"description": "Simple demo of Presto
      SQL operator PrestoSQLOp", "name": "Presto SQL Pipeline"}'}
  labels: {pipelines.kubeflow.org/kfp_sdk_version: 0.5.1}
spec:
  entrypoint: presto-sql-pipeline
  templates:
  - name: presto-demo
    container:
      args:
      - --source-name
      - '{{workflow.namespace}}.{{workflow.name}}.presto-demo'
      - --query-sql
      - "SELECT 1;"
      image: gcr.io/our-data-warehouse/presto-cli:latest
      volumeMounts:
      - {mountPath: /mnt/secrets, name: presto-local-vol}
    metadata:
      annotations:
        sidecar.istio.io/inject: "true"
      labels: {pipelines.kubeflow.org/pipeline-sdk-type: kfp}
    volumes:
    - name: presto-local-vol
      secret: {secretName: presto-local}
  - name: presto-sql-pipeline
    dag:
      tasks:
      - {name: presto-demo, template: presto-demo}
  arguments:
    parameters: []
  serviceAccountName: argo

【问题讨论】:

  • 能否提供完整的工作流程yaml?
  • 没问题
  • 据我了解,如果您想在未注入的命名空间中部署您的 argo 工作流,您将不得不使用 istioctl kube-inject -f argoworkflow.yaml | kubectl apply -f -,如 here 所述。你试过吗?
  • 除了将--- 放在它的底部之外,它根本不会更改yaml。主要原因是 Argo 工作流不是部署 yaml,它是发送到 Argo 服务器以编排管道的配置,因此实际的 Pod 创建完全由 Argo 服务器完成。

标签: istio argo-workflows


【解决方案1】:

我有一个类似的要求 - Istio 应该只在 pod 指定时注入代理,而忽略所有其他 pod 的自动注入。 Istio 的官方文档中没有提到该解决方案,但可以这样做。

正如user defined custom matrix 中所述,当满足以下条件时,我们可以让 Istio 遵循此行为:

  • 命名空间有标签istio-injection=enabled
  • Istio 全局代理自动注入策略已禁用(对于 helm 图表值:global.proxy.autoInject,如给定的 here)。
  • 需要proxy的pod有注解sidecar.istio.io/inject: "true"

所有其他 pod 都没有 Istio 代理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-16
    • 2020-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-16
    相关资源
    最近更新 更多