字段名称 | 字段类型 | 字段说明 |
metadata.name | string | PeerAuthentication 名称 |
metadata.namespace | string | PeerAuthentication 命名空间 |
spec.selector | map<string, string> | PeerAuthentication 使用填写的标签键值对,配合填写的 namespace,匹配配置下发的 Workload 范围: namespace 填写 istio-system,且 selector 字段不填写时,该策略生效范围为整个网格。 namespace 填写非 istio-system 的 namespace,且 selector 字段不填写时,策略生效范围为填写的 namespace。 namespace 填写非 istio-system 的 namespace,且 selector 字段填写了有效键值对时,策略的生效范围为在所填 namespace 下根据 selector 匹配到的 Workload。 |
spec.mtls.mode | - | 配置 mTLS 的模式,支持: UNSET |
spec.portLevelMtls | map<uint32, mTLS mode> | 设置端口级别的 mTLS 模式 |
curl http://product.base.svc.cluster.local:7000/product
明文访问命名空间 base 下的 product 服务。apiVersion: security.istio.io/v1beta1kind: PeerAuthenticationmetadata:name: base-strictnamespace: basespec:mtls:mode: STRICT
字段名称 | 字段类型 | 字段说明 |
metadata.name | string | RequestAuthentication 名称 |
metadata.namespace | string | RequestAuthentication 命名空间 |
spec.selector | map<string, string> | RequestAuthentication 使用填写的标签键值对,配合填写的namespace,匹配配置下发的 Workload 范围,namespace 填写 istio-system,且 selector 字段不填写时,该策略生效范围为整个网格;namespace 填写非 istio-system 的 namespace,且 selector 字段不填写时,策略生效范围为填写的 namespace;namespace 填写非 istio-system 的 namespace,且 selector 字段填写了有效键值对时,策略的生效范围为在所填 namespace 下根据 selector 匹配到的Workload |
spec.jwtRules.issuer | string | 配置 JWT token 的 issuer,详情参见 iss claim |
spec.jwtRules.audiences | string[] | |
spec.jwtRules.jwksUri | string | |
spec.jwtRules.jwks | string | |
spec.jwtRules.fromHeaders | map<string,string>[] | 配置 JWT 从 header 中的提取位置列表 |
spec.jwtRules.fromParams | string[] | 配置 JWT 从 header 中提取的 parameters,例如从 parameter mytoken( /path?my_token= )中提取 |
spec.jwtRules.outputPayloadToHeader | string | 配置成功验证的 JWT payload 输出的 header 名称,转发的数据为 base64_encoded(jwt_payload_in_JSON) 。未填写时默认不会输出 JWT payload |
spec.jwtRules.forwardOriginalToken | bool | 配置是否将原始 JWT 转发至 upstream。默认值为 false |
httpbin.foo
,并配置通过 Ingress Gateway 暴露此服务到公网:apiVersion: v1kind: Namespacemetadata:name: foolabels:istio.io/rev: 1-6-9 # 开启 namespace 的 sidecar 自动注入(istio 版本 1.6.9)spec:finalizers:- kubernetes---apiVersion: v1kind: ServiceAccountmetadata:name: httpbinnamespace: foo---apiVersion: v1kind: Servicemetadata:name: httpbinnamespace: foolabels:app: httpbinservice: httpbinspec:ports:- name: httpport: 8000targetPort: 80selector:app: httpbin---apiVersion: apps/v1kind: Deploymentmetadata:name: httpbinnamespace: foospec:replicas: 1selector:matchLabels:app: httpbinversion: v1template:metadata:labels:app: httpbinversion: v1spec:serviceAccountName: httpbincontainers:- image: docker.io/kennethreitz/httpbinimagePullPolicy: IfNotPresentname: httpbinports:- containerPort: 80
apiVersion: networking.istio.io/v1alpha3kind: Gatewaymetadata:name: httpbin-gatewaynamespace: foospec:selector:app: istio-ingressgatewayistio: ingressgatewayservers:- port:number: 80name: httpprotocol: HTTPhosts:- "*"---apiVersion: networking.istio.io/v1alpha3kind: VirtualServicemetadata:name: httpbinnamespace: foospec:hosts:- "*"gateways:- httpbin-gatewayhttp:- route:- destination:port:number: 8000host: httpbin.foo.svc.cluster.local
curl "$INGRESS_IP:80/headers" -s -o /dev/null -w "%{http_code}\\n"
测试服务的连通性,注意您需要将代码中的 $INGRESS_IP
替换为您的边缘代理网关 IP 地址,正常情况下会返回 200
返回码。apiVersion: "security.istio.io/v1beta1"kind: "RequestAuthentication"metadata:name: "jwt-example"namespace: istio-systemspec:selector:matchLabels:istio: ingressgatewayapp: istio-ingressgatewayjwtRules:- issuer: "testing@secure.istio.io"jwksUri: "https://raw.githubusercontent.com/istio/istio/release-1.9/security/tools/jwt/samples/jwks.json"
$INGRESS_IP
替换为您的边缘代理网关 IP 地址。边缘代理网关不会放通携带非法 JWT 令牌的请求,因此会返回 401
返回码。curl --header "Authorization: Bearer deadbeef" "$INGRESS_IP:80/headers" -s -o /dev/null -w "%{http_code}\\n"
$INGRESS_IP
替换为您的边缘代理网关 IP 地址。边缘代理网关会放通携带合法 JWT 令牌的请求,因此会返回 200
返回码。TOKEN=$(curl https://raw.githubusercontent.com/istio/istio/release-1.9/security/tools/jwt/samples/demo.jwt -s)curl --header "Authorization: Bearer $TOKEN" "$INGRESS_IP:80/headers" -s -o /dev/null -w "%{http_code}\\n"
apiVersion: security.istio.io/v1beta1kind: AuthorizationPolicymetadata:name: frontend-ingressnamespace: istio-systemspec:selector:matchLabels:app: istio-ingressgatewayistio: ingressgatewayrules:- from:- source:notRequestPrincipals:- '*'action: DENY
curl "$INGRESS_IP:80/headers" -s -o /dev/null -w "%{http_code}\\n"
,发现访问失败,返回 403
返回码,AuthorizationPolicy 策略生效。
本页内容是否解决了您的问题?