自定义授权服务 添加外部授权服务 将上面的HTTP和gRPC服务添加到服务网格的外部授权服务内。 定义授权策略&验证访问 定义如下授权策略,对httpbin应用的/headers路径的请求将被转发到第三方授权服务进行验证: apiVersion: security.istio.io/v1beta1 kind: AuthorizationPolicy metadata: name: extauthz spec: selector: matchLabels: app: httpbin action: CUSTOM provider: The provider name must match the extension provider defined in the mesh config. You can also replace this with sampleextauthzhttp to test the other external authorizer definition. name: sampleextauthzgrpc rules: The rules specify when to trigger the external authorizer. to: operation: paths: ["/headers"] 从sleep应用请求httpbin的/headers路径,由于请求头带了"xextauthz:deny",请求被拦截: kubectl exec "$(kubectl get pod l appsleep n foo o jsonpath{.items..metadata.name})" c sleep n foo curl " H "xextauthz: deny" s denied by extauthz for not found header xextauthz: allow in the request 修改请求,带上"xextauthz: allow"头部,请求放行: kubectl exec "$(kubectl get pod l appsleep n foo o jsonpath{.items..metadata.name})" c sleep n foo curl " H "xextauthz: allow" s { "headers": { "Accept": "/", "Host": "httpbin.foo:8000", "UserAgent": "curl/8.2.1", "XB3Parentspanid": "eb42a8165099e7db", "XB3Sampled": "1", "XB3Spanid": "cd6540ba1cfd9e8c", "XB3Traceid": "e7e15cc10dc66630eb42a8165099e7db", "XEnvoyAttemptCount": "1", "XExtAuthz": "allow", "XExtAuthzAdditionalHeaderOverride": "grpcadditionalheaderoverridevalue", "XExtAuthzCheckReceived": "source:{address:{socketaddress:{address:"10.1.0.25" portvalue:37654}} principal:"spiffe://cluster.local/ns/foo/sa/sleep"} destination:{address:{socketaddress:{address:"10.1.0.24" portvalue:80}} principal:"spiffe://cluster.local/ns/foo/sa/httpbin"} request:{time:{seconds:1692015383 nanos:990298000} http:{id:"7462237371770661564" method:"GET" headers:{key:":authority" value:"httpbin.foo:8000"} headers:{key:":method" value:"GET"} headers:{key:":path" value:"/headers"} headers:{key:":scheme" value:"http"} headers:{key:"accept" value:"/"} headers:{key:"useragent" value:"curl/8.2.1"} headers:{key:"xb3sampled" value:"1"} headers:{key:"xb3spanid" value:"eb42a8165099e7db"} headers:{key:"xb3traceid" value:"e7e15cc10dc66630eb42a8165099e7db"} headers:{key:"xenvoyattemptcount" value:"1"} headers:{key:"xextauthz" value:"allow"} headers:{key:"xforwardedclientcert" value:"Byspiffe://cluster.local/ns/foo/sa/httpbin;Hashc32db24acfa670a8bbe46f0897ebb70b9ccc0e630ee32afcd1ec037d6616e6c5;Subject"";URIspiffe://cluster.local/ns/foo/sa/sleep"} headers:{key:"xforwardedproto" value:"http"} headers:{key:"xrequestid" value:"aba7b68c6bee9d58b1637454075c6ece"} path:"/headers" host:"httpbin.foo:8000" scheme:"http" protocol:"HTTP/1.1"}} metadatacontext:{}", "XExtAuthzCheckResult": "allowed", "XForwardedClientCert": "Byspiffe://cluster.local/ns/foo/sa/httpbin;Hashc32db24acfa670a8bbe46f0897ebb70b9ccc0e630ee32afcd1ec037d6616e6c5;Subject"";URIspiffe://cluster.local/ns/foo/sa/sleep" } }