我有一个场景,需要在不标记命名空间的情况下将istio端注入到工作负载中。我无法标记命名空间的原因是,在我的集群中,命名空间是通过自动进程创建的,而由于安全原因,目前我无法更改该进程。因此,我们想了解是否有一种方法可以在不标记命名空间的情况下自动将istio-sidecar注入到工作负载中。
我已经尝试和测试过的资源。
-
在部署/pod定义中使用上的
sidecar.istio.io/inject="true"
注释。Note: the annotation will only work with if the namespace is labelled and for this reason I really don't why do we even have this annotation. For more information please visit: https://github.com/istio/istio/issues/6476#issuecomment-1023817004
-
手动注入有效,但操作开销太大,因此不是首选方法。
-
DiscoverySelector构造as仅适用于名称空间,而不适用于kubernetes内的deployment/pods对象。
Istio版本
client version: 1.12.2
control plane version: 1.12.1
上述问题已解决。
实现上述目的的方法是在pod/deployment定义中将sidecar.istio.io/inject="true"
用作label
,而不是用作annotation
。
的正确定义应该看起来像这个
apiVersion: v1
kind: Pod
metadata:
name: labeled-true
namespace: policy-disabled
labels:
sidecar.istio.io/inject: "true"
spec:
containers:
- image: docker.io/citizenstig/httpbin
imagePullPolicy: IfNotPresent
name: httpbin
不像这个
apiVersion: v1
kind: Pod
metadata:
name: labeled-true
namespace: policy-disabled
annotations:
sidecar.istio.io/inject: "true"
spec:
containers:
- image: docker.io/citizenstig/httpbin
imagePullPolicy: IfNotPresent
name: httpbin