Istio をクラスターでセットアップして実行しています。自動インジェクションはデフォルトで有効になっており、いくつかの名前空間で有効になっています。現在、他の名前空間の一部のポッドに対して自動注入を行いたいと考えていますが、名前空間全体で有効になっていない場合、指定されたポッドに対して自動注入を行うことは一見不可能であるという問題が発生しました。Argo ワークフローを使用して Pod を自動的に作成するsidecar.istio.io/inject: "true"
ため、Argo ワークフロー内で指定して、結果の Pod がメタデータにこの注釈付きで表示されるようにします。
...
metadata:
annotations:
sidecar.istio.io/inject: "true"
...
istio-injection
残念ながら、名前空間のラベルが明示的に に設定されていない限り、Istio はサイドカーを挿入せず、enabled
そこで実行されているすべてのポッドにサイドカーを追加します。
ポッドは Argo サービスによって自動的に作成されるため、手動インジェクションも使用できず、ワークフロー定義に基づいて特定のポッドにのみサイドカーをインジェクトする必要がありました。
では、この問題を克服する方法はありますか? ありがとう!
完全な 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