300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > Per-service mutual TLS authentication enablement

Per-service mutual TLS authentication enablement

时间:2022-03-24 04:42:14

相关推荐

Per-service mutual TLS authentication enablement

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

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

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

Before you begin

理解Istio mutual TLS authentication 概念熟悉 testing Istio mutual TLS authentication.安装了带有相互TLS身份认证的Istio启动带Istio sidecar的 httpbin demo 。同时为了测试目的,运行两个 sleep 实例,一个带sidecar,一个不带(在不同的命名空间)。下面命令帮助你启动这些服务。

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。