Per-service mutual TLS authentication enablement

在这个 Installation guide,我们将展示如何在sidecars间启动 mutual TLS authentication 。这个设置将会被网格中的所有sidecars应用。

在这个指导中,你将学会:

  • 注释k8s服务以禁用(或启用)选择性服务的相互TLS身份认证
  • 修改Istio网格配置以排除控制服务的相互TLS身份认证

Before you begin

kubectl apply -f <(istioctl kube-inject -f samples/httpbin/httpbin.yaml)
kubectl apply -f <(istioctl kube-inject -f samples/sleep/sleep.yaml)
kubectl create ns legacy && kubectl apply -f samples/sleep/sleep.yaml -n legacy

在这个初始化安装中,我们期望在default命名空间的sleep 实例能够和httpbin服务通信,而另一个在legacy 命名空间的不能,因为它没有进行mTLS的sidecar。

kubectl exec $(kubectl get pod -l app=sleep -o jsonpath={.items..metadata.name}) -c sleep -- curl http://httpbin.default:8000/ip -s
{
  "origin": "127.0.0.1"
}
kubectl exec $(kubectl get pod -l app=sleep -o jsonpath={.items..metadata.name} -n legacy) -n legacy -- curl http://httpbin.default:8000/ip -s
command terminated with exit code 56

Disable mutual TLS authentication for “httpbin” service

如果我们想要为httpbin(在8000端口)关闭mTLS,而不改变网格的身份认证设置,我们可以通过为httpbin 服务定义添加下面这个注解。

annotations:
  auth.istio.io/8000: NONE

为了快速测试,运行 kubectl edit svc httpbin 并在其上添加注解(或者你可以编辑原始的httpbin.yaml文件并重新应用)。更改被应用后, 来自sleep.legacy请求现在应该成功了,因为mTLS被取消了。

注意:

  • 注解可以产生相反的效果,换句话说,通过使用 MUTUAL_TLS 注解值而不是 NONE为服务开启mTLS。人们能够使用这个注解为选择性的服务启用mTLS,而不是在整个网格中启用。
  • 注解可以针对没有sidecar的服务,通知Istio当客户端对那个服务产生调用时不采用mTLS。实际上,如果一个系统有一些不被Istio管理的服务(没有sidecar),这是修复对这些服务的通信问题的一个推荐做法。

Disable mutual TLS authentication for control services

因为我们不能注解控制服务,如API server,在 Istio 0.3中,我们推荐 mtls_excluded_services 的网格配置来指定那些不应使用mTLS的服务。如果你的应用需要和任何控制服务进行通信,这必须使用全限定域名。

在demo的这部分,我们将展示这个字段的影响。
默认情况下(0.3或之后版本),这个list包含 kubernetes.default.svc.cluster.local (在通常安装中是API server服务的名称)。你可以通过运行下列命令来确认:

kubectl get configmap -n istio-system istio -o yaml | grep mtlsExcludedServices
mtlsExcludedServices: ["kubernetes.default.svc.cluster.local"]

然后期望 kubernetes.default 服务能够成功请求:

kubectl exec $(kubectl get pod -l app=sleep -o jsonpath={.items..metadata.name}) -c sleep -- curl https://kubernetes.default:443/api/ -k -s
{
  "kind": "APIVersions",
  "versions": [
    "v1"
  ],
  "serverAddressByClientCIDRs": [
    {
      "clientCIDR": "0.0.0.0/0",
      "serverAddress": "104.199.122.14"
    }
  ]
}

现在,运行 kubectl edit configmap istio -n istio-system 然后清除mtlsExcludedServices ,并且重启pilot:

kubectl get pod $(kubectl get pod -l istio=pilot -n istio-system -o jsonpath={.items..metadata.name}) -n istio-system -o yaml | kubectl replace --force -f -

上面的测试请求失败并返回code 35, 因为sleep 的sidecar再次开始使用mTLS了:

kubectl exec $(kubectl get pod -l app=sleep -o jsonpath={.items..metadata.name}) -c sleep -- curl https://kubernetes.default:443/api/ -k -s
command terminated with exit code 35
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值