在Istio中正确定义mTLS身份验证策略

时间:2020-06-02 05:00:44

标签: ubuntu service yaml kubectl istio

我正在尝试通过Istio在线课程中发现的以下命令集进行操作:

设置Istio证书颁发机构(CA)

留言簿应用程序的版本2使用了未启用Istio的外部服务(音频分析器)。因此,在本练习中,您将全局禁用mTLS并将其仅用于内部集群服务之间的通信。

  1. 确保城堡正在运行。 Citadel是Istio的集群内证书颁发机构(CA),在群集中生成和管理加密身份是必需的。
kubectl get deployment -l istio=citadel -n istio-system

这是预期的输出:

enter image description here

  1. 为音频分析器服务定义mTLS身份验证策略:
cat <<EOF | istioctl create -f -
apiVersion: authentication.istio.io/v1alpha1
kind: Policy
metadata:
  name: mtls-to-analyzer
  namespace: default
spec:
  targets:
  - name: analyzer
  peers:
  - mtls:
EOF

Created config policy/default/mtls-to-analyzer at revision 3934195 
  1. 确认该策略已创建:
kubectl get policies.authentication.istio.io

enter image description here

  1. 使用“目标”规则从留言簿启用mTLS:
cat <<EOF | istioctl create -f -
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: route-with-mtls-for-analyzer
  namespace: default
spec:
  host: "analyzer.default.svc.cluster.local"
  trafficPolicy:
    tls:
      mode: ISTIO_MUTUAL
EOF

Created config destination-rule/default/route-with-mtls-for-analyzer at revision 3934279

但是,当我尝试运行第二个命令时,遇到了以下错误:

Error: unknown command "create" for "istioctl"

当我使用“安装”而不是创建时:

cat <<EOF | istioctl install -f -
apiVersion: authentication.istio.io/v1alpha1
kind: Policy
metadata:
  name: mtls-to-analyzer
  namespace: default
spec:
  targets:
  - name: Tone Analyzer-qy
  peers:
  - mtls:
EOF

我收到以下错误:

Error: failed to apply manifests: unknown field "peers" in v1alpha1.IstioOperatorSpec:

任何人都可以提供一些有关如何修改YAML的信息,以便可以正确定义mTLS身份验证服务吗?第一步,我得到了正确的预期输出,但第四步,我得到了相同的“未知字段”错误。

1 个答案:

答案 0 :(得分:1)

istioctl主要用于安装和调试istio。

要创建istio对象,应使用kubectl

我认为您要使用的是kubectl而不是istioctl,如下例所示:

cat <<EOF | kubectl create -f -
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: route-with-mtls-for-analyzer
  namespace: default
spec:
  host: "analyzer.default.svc.cluster.local"
  trafficPolicy:
    tls:
      mode: ISTIO_MUTUAL
EOF

取决于kubernetes集群的版本,kubectl create可以被贬值,而应使用kubectl apply代替它。所以命令看起来像这样。

cat <<EOF | kubectl apply -f -
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: route-with-mtls-for-analyzer
  namespace: default
spec:
  host: "analyzer.default.svc.cluster.local"
  trafficPolicy:
    tls:
      mode: ISTIO_MUTUAL
EOF

有关更多信息,请查看kubernetes documentation

希望有帮助。