ืืขืจื. ืชืจืืื:
ืืงืื ื ืืฉืืื Kubernetes ืฉืื ืคืจืกื ื ืืช Istio ืืืืฉืื ืืืงืจื-ืฉืืจืืช ืืืืืื, Sentiment Analysis, ืืื ืืืืืื ืืช ืืืืืืืช ืฉื Istio.
ืขื Istio, ืืฆืืื ื ืืฉืืืจ ืขื ืืฉืืจืืชืื ืฉืื ื ืงืื ืื ืืืืืื ืฉืื ืื ืฆืจืืืื ืืืืฉื ืฉืืืืช ืืื ื ืืกืืื ืืช ืืืืจืื, ืคืกืงื ืืื, ืืคืกืงืื, ืืขืงื, ื ืืืืจ. . ืื ืืกืฃ, ืืฉืชืืฉื ื ืืืื ืืงืืช ืืืืงื ืืคืจืืกื ืืชืงืืืืช: ืืืืงืืช A/B, ืฉืืงืืฃ ืืืืืื ืงื ืจื.
ืืืืืจ ืืืืฉ ื ืขืกืืง ืืจืืืื ืืืืจืื ืื ืืืจื ืืขืจื ืขืกืงื: ืืืืืช ืืืจืฉืื - ืืืืืกืืื ืื ืชืขื ืื ืืืืชื!
ืืืืืช ืืืจืฉืื ืืืืกืืื
ืืขืืื ืื ืืืืชื ืืืืื ืฉืืงืื ืืฉืจืื ืืืืืืช ืืืจืฉืื. ืื ืืืืื ืืืกืืื ืืืฆืืข ืื ืงืืืช ืืื ืืื ืืืืืืช ืืื ืืืคืื ืืช ืื ืืฉืืื ืืืื ืืืื ืื, ืืืืชืจ ืืื, ืืขืืจืจื ืืฉืจืื ืขืืืจื?
ืืชืฉืืื ืคืฉืืื: Istio ืืขืืืจื ืืช ืืืืจืืืช ืขื ืืืืืืืช ืืืื ืืืฉืืจืืชืื ืฉืื ื-Envoy proxy. ืขื ืฉืืืงืฉืืช ืืืืขืืช ืืฉืืจืืชืื, ืื ืืืจ ืืืฉืจื ืืืืฉืจื, ืื ืฉืื ืื ืฉืฆืจืื ืืขืฉืืช ืืื ืืืชืื ืงืื ืฉืืืืฉื ืืขืกืงืื.
ื ืฉืืข ืืื? ืืืื ื ืกืชืื ืคื ืืื!
ืืืืืช ืขื Auth0
ืืฉืจืช ืื ืืืื ืืืืืืช ืืืืฉื, ื ืฉืชืืฉ ื-Auth0, ืฉืืฉ ืื ืืจืกืช ื ืืกืืื, ืืื ืืื ืืืืืืืืืช ืืฉืืืืฉ ืืื ื ืคืฉืื ืืืื ืืช ืื. ืขื ืืืช, ื ืืชื ืืืืฉื ืืช ืืืชื ืขืงืจืื ืืช ืขื ืื ืืื ืืืจ
ืจืืฉืืช, ืขืืืจ ืื
ืฆืืื ืืช ืืืืืืื ืืื ืืงืืืฅ resource-manifests/istio/security/auth-policy.yaml
(
apiVersion: authentication.istio.io/v1alpha1
kind: Policy
metadata:
name: auth-policy
spec:
targets:
- name: sa-web-app
- name: sa-feedback
origins:
- jwt:
issuer: "https://{YOUR_DOMAIN}/"
jwksUri: "https://{YOUR_DOMAIN}/.well-known/jwks.json"
principalBinding: USE_ORIGIN
ืขื ืืฉืื ืืื, ืืืืก (ืืื ืืฉืืืฉืช ืจืืืื ืืืฉืืจ ืืืงืจื ืืืกืืกืืื ืืืืกืืื - ืชืจืืื ืืงืืจืื) ืืืืืจ ืืช Envoy ืืืืช ืืงืฉืืช ืืคื ื ืืขืืจืชื ืืฉืืจืืชืื: sa-web-app
ะธ sa-feedback
. ืืื ืขื ืืืช, ืืชืฆืืจื ืืื ื ืืืืืช ืขื ืฉืืืื ืฉืืจืืช sa-frontend
, ืื ืฉืืืคืฉืจ ืื ื ืืืฉืืืจ ืืช ืืืืืช ืืื ืืืืืช. ืืื ืืืืื ืืช ืืืืื ืืืช, ืืคืขื ืืช ืืคืงืืื:
$ kubectl apply -f resource-manifests/istio/security/auth-policy.yaml
policy.authentication.istio.io โauth-policyโ created
ืืืจื ืืขืืื ืืืืืฉื ืืงืฉื - ืชืจืื ืฉืื ื ืืืจ ืืกืืืืก 401 ืื ืืืจืฉื. ืขืืฉืื ืืืื ื ื ืชื ืืืืฉ ืืช ืืฉืชืืฉื ืืงืฆื ืืืืืืช ืขื Auth0.
ืืืืืช ืืงืฉืืช ืขื Auth0
ืืื ืืืืช ืืงืฉืืช ืฉื ืืฉืชืืฉื ืงืฆื, ืขืืื ืืืฆืืจ API ื-Auth0 ืฉืืืฆื ืืช ืืฉืืจืืชืื ืืืืืืชืื (ืืืงืืจืืช, ืคืจืืื ืืืืจืืืื). ืืื ืืืฆืืจ API, ืขืืืจ ืื Auth0 Portal > APIs > Create API ืืืื ืืช ืืืืคืก:
ืืืืืข ืืืฉืื ืืื ืืื ืืืื, ืฉืื ื ืฉืชืืฉ ืืืืฉื ืืชืกืจืื. ืืื ื ืจืฉืื ืืช ืื ืืื:
- ืงืื: {YOUR_AUDIENCE}
ืฉืืจ ืืคืจืืื ืฉืื ื ืฆืจืืืื ื ืืฆืืื ืืคืืจืื Auth0 ืืงืืข ืืืฉืืืื - ืืืจ ืืืฉืื ืืืืงื (ื ืืฆืจ ืืืืืืืืช ืืื ืขื ื-API).
ืืื ื ืืชืื:
- ืชึฐืืึผื: {YOUR_DOMAIN}
- ืืืื ืืงืื: {YOUR_CLIENT_ID}
ืืืื ืื ืืืฉืื ืืืืงื ืืฉืื ืืงืกื ืืชืืืืช URL ืืืชืจืืช ืืืชืงืฉืจืืช ืืืืจืช (ืืชืืืืช URL ืคืชืืจืืช ืืืชืงืฉืจืืช ืืืืจืช), ืืื ืื ื ืืฆืืื ืื ืืช ืืชืืืช ืืืชืจ ืฉืืืื ืืฉ ืืฉืืื ืืช ืืฉืืื ืืืืจ ืืฉืืืช ืืืืืืช. ืืืงืจื ืฉืื ื ืื:
http://{EXTERNAL_IP}/callback
ืืืฉืืื ืืชืืืืช ืืชืจืื ืืืชืจืืช ืืืฆืืื (ืืชืืืืช URL ืืืชืจืืช ืืืฆืืื) ืืืกืฃ:
http://{EXTERNAL_IP}/logout
ืืืื ื ืขืืืจ ืืืืืช.
ืขืืืื ืืืืชื
ืขืืืจ ืืกื ืืฃ auth0
ืืืืจ [istio-mastery]
. ืืกื ืืฃ ืื, ืงืื ืืงืฆื ืืฉืชื ื ืืื ืืืคื ืืช ืืฉืชืืฉืื ื-Auth0 ืืฆืืจื ืืืืืช ืืืืฉืชืืฉ ืืืกืืืื JWT ืืืงืฉืืช ืืฉืืจืืชืื ืืืจืื. ืืืืจืื ืืืืฉื ืืืืคื ืืื (
analyzeSentence() {
fetch('/sentiment', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${auth.getAccessToken()}` // Access Token
},
body: JSON.stringify({ sentence: this.textField.getValue() })
})
.then(response => response.json())
.then(data => this.setState(data));
}
ืืื ืืฉื ืืช ืืช ื-frontend ืืฉืืืืฉ ืื ืชืื ื ืืืืจืื ื-Auth0, ืคืชื sa-frontend/src/services/Auth.js
ืืืืืืคื ืื ืืช ืืขืจืืื ืฉืืชืื ื ืืืขืื (
const Config = {
clientID: '{YOUR_CLIENT_ID}',
domain:'{YOUR_DOMAIN}',
audience: '{YOUR_AUDIENCE}',
ingressIP: '{EXTERNAL_IP}' // ะัะฟะพะปัะทัะตััั ะดะปั ัะตะดะธัะตะบัะฐ ะฟะพัะปะต ะฐััะตะฝัะธัะธะบะฐัะธะธ
}
ืืืคืืืงืฆืื ืืืื ื. ืฆืืื ืืช ืืืื ื-Docker ืฉืื ืืคืงืืืืช ืืืื ืืขืช ืืื ืืื ืืืคืจืืกื ืฉื ืืฉืื ืืืื ืฉืืืฆืขื:
$ docker build -f sa-frontend/Dockerfile
-t $DOCKER_USER_ID/sentiment-analysis-frontend:istio-auth0
sa-frontend
$ docker push $DOCKER_USER_ID/sentiment-analysis-frontend:istio-auth0
$ kubectl set image deployment/sa-frontend
sa-frontend=$DOCKER_USER_ID/sentiment-analysis-frontend:istio-auth0
ื ืกื ืืช ืืืคืืืงืฆืื! ืืชื ืชืืคื ื ื-Auth0, ืฉื ืขืืื ืืืชืืืจ (ืื ืืืืจืฉื), ืืืืืจ ืืื ืชืฉืื ืืืืจื ืืืฃ ืฉืืื ื ืืืืฆืขื ืืงืฉืืช ืฉืืืจ ืืืืืชืืช. ืื ืชื ืกื ืืช ืืคืงืืืืช ืืืืืืจืืช ืืืืงืื ืืจืืฉืื ืื ืฉื ืืืืืจ ืขื curl, ืชืงืื ืืช ืืงืื 401 ืงืื ืกืืืืก, ืืกืื ืฉืืืงืฉื ืืื ื ืืืืฉืจืช.
ืืืื ื ืขืฉื ืืช ืืฆืขื ืืื - ืืฉืจ ืืงืฉืืช.
ืืจืฉืื ืขื Auth0
ืืืืืืช ืืืคืฉืจ ืื ื ืืืืื ืืืื ืืืฉืชืืฉ, ืื ื ืืจืฉืช ืืจืฉืื ืืื ืืืขืช ืืื ืืฉ ืื ืืืฉื. Istio ืืฆืืขื ืืืื ืื ืืื.
ืืืืืื, ืืืื ื ืืฆืืจ ืฉืชื ืงืืืฆืืช ืืฉืชืืฉืื (ืจืื ืืช ืืชืจืฉืื ืฉืืืื):
- ืืืจืื (ืืฉืชืืฉืื) - ืขื ืืืฉื ืจืง ืืฉืืจืืชื SA-WebApp ื-SA-Frontend;
- ืื ืืื (ืื ืืื) - ืขื ืืืฉื ืืื ืฉืืืฉืช ืืฉืืจืืชืื.
ืืืฉื ืืจืฉืื
ืืื ืืืฆืืจ ืงืืืฆืืช ืืื, ื ืฉืชืืฉ ืืชืืกืฃ Auth0 Authorization ืื ืฉืชืืฉ ื-Istio ืืื ืืกืคืง ืืื ืจืืืช ืืืฉื ืฉืื ืืช.
ืืชืงื ื ืืชืฆืืจื ืฉื Auth0 Authorization
ืืคืืจืื Auth0, ืขืืืจ ืื ืืจืืืืช (ืจืืืืช) ืืืชืงื Auth0 Authorization. ืืืืจ ืืืชืงื ื, ืขืืืจ ืื ืืืจืืช ืืจืฉืื, ืืฉื - ืืชืฆืืจืช ืืืืืจ ืขื ืืื ืืืืฆื ืขื ืืคืื ื ืืฉืืืืืช ืืขืืืื ื ืืืืืจื ืืืคืฉืจืืช ืืชืคืจืื ืืืชืืืื (ืชึฐืฆืึผืจึธื). ืืคืขื ืงืืืฆืืช (ืงืืืฆืืช) ืืืืฅ ืขื ืืคืชืืจ ืคืจืกืื ืืืื (ืืื ืคืจืกืื).
ืืฆืืจืช ืงืืืฆืืช
ื-Extension Authorization ืขืืืจ ืื ืงืืืฆืืช ืืืืฆืืจ ืงืืืฆื ืื ืืื. ืืืืืื ืฉืื ื ื ืชืืืืก ืืื ืืืฉืชืืฉืื ืืืืืืชืื ืืื ืืฉืชืืฉืื ืจืืืืื, ืืื ืฆืืจื ืืืฆืืจ ืขืืืจื ืงืืืฆื ื ืืกืคืช.
ืืืจ ืงืืืฆื ืื ืืื, ืืืืืฅ ืืืกืฃ ืืืจืื, ืืืกืฃ ืืช ืืืฉืืื ืืจืืฉื ืฉืื. ืืฉืืจ ืืืง ืืืืฉืชืืฉืื ืืื ืื ืงืืืฆื ืืื ืืืืื ืฉืืืืฉื ืืื ืขืช ืืื. (ื ืืชื ืืืฆืืจ ืืฉืชืืฉืื ืืืฉืื ืืืืคื ืืื ื ืืืืฆืขืืช Auth0 Portal > ืืฉืชืืฉืื > ืฆืืจ ืืฉืชืืฉ.)
ืืืกืฃ ืชืืืขื ืงืืืฆืชืืช ื-Access Token
ืืฉืชืืฉืื ื ืืกืคื ืืงืืืฆืืช, ืื ืืืืข ืื ืืืื ืืืื ืืืื ืืืืื ืื ืืืกืืืื ื ืืืฉื. ืืื ืืขืืื ื-OpenID Connect ืืืืงืืื ืืืืืืจ ืืช ืืงืืืฆืืช ืฉืื ื ืฆืจืืืื, ืืืกืืืื ืืฆืืจื ืืืืกืืฃ ืืฉืื
ืืื ืืืฆืืจ ืืื, ืขืืืจ ืื Auth0 Portal to ืืืงื, ืืืืืฅ ืฆืืจ ืืื ืืืืจื ืืื ืจืืง ืืืชืื ืืืช.
ืืขืชืง ืืช ืืงืื ืืืื ืืฉืืืจ ืืืชื ืืืื ืืืฉ ืืืกืฃ ืชืืืขื ืงืืืฆืชืืช (
function (user, context, callback) {
context.accessToken['https://sa.io/group'] = user.groups[0];
return callback(null, user, context);
}
ืฉืื ืื: ืงืื ืื ืืืงื ืืช ืงืืืฆืช ืืืฉืชืืฉืื ืืจืืฉืื ื ืฉืืืืืจื ืืืจืืืช ืืืจืฉืื ืืืืกืืฃ ืืืชื ืืืกืืืื ืืืืฉื ืืชืืืขื ืืืชืืืช ืืืฉืืช (ืชืืช ืืจืื ืืฉืืืช ืฉืื, ืื ืืจืฉ ืขื ืืื Auth0).
ืืืืจ ืืขืืื ืืืงื ืืืืงื ืฉืืฉ ืืื ืฉื ื ืืืืื ืืชืืืื ืืกืืจ ืืื:
- auth0-autorization-extension
- ืืืกืฃ ืชืืืขื ืงืืืฆืชืืช
ืืกืืจ ืืฉืื ืืืืืื ืฉืฉืื ืืงืืืฆื ืืงืื ืืช ืืืื ืืืืคื ืืกืื ืืจืื ื auth0-autorization-extension ืืืืจื ืื ืืชืืืกืฃ ืืืขื ื ืขื ืืื ืืืื ืืฉื ื. ืืชืืฆืื ืืื ืืกืืืื ืืืฉื ืืื:
{
"https://sa.io/group": "Moderators",
"iss": "https://sentiment-analysis.eu.auth0.com/",
"sub": "google-oauth2|196405271625531691872"
// [ัะพะบัะฐัะตะฝะพ ะดะปั ะฝะฐะณะปัะดะฝะพััะธ]
}
ืืขืช ืขืืื ืืืืืืจ ืืช ื-proxy ืฉื Envoy ืืืืืง ืืืฉืช ืืฉืชืืฉ, ืฉืขืืืจื ืืงืืืฆื ืชืืืฉื ืืืชืืืขื (https://sa.io/group
) ืืืกืืืื ืืืืฉื ืฉืืืืืจ. ืื ืื ืืฉื ืืืืง ืืื ืฉื ืืืืืจ.
ืชืฆืืจืช ืืจืฉืื ื-Istio
ืืื ืฉืืจืฉืื ืชืคืขื, ืขืืื ืืืคืขืื ืืช RBAC ืขืืืจ Istio. ืืฉื ืื, ื ืฉืชืืฉ ืืชืฆืืจื ืืืื:
apiVersion: "rbac.istio.io/v1alpha1"
kind: RbacConfig
metadata:
name: default
spec:
mode: 'ON_WITH_INCLUSION' # 1
inclusion:
services: # 2
- "sa-frontend.default.svc.cluster.local"
- "sa-web-app.default.svc.cluster.local"
- "sa-feedback.default.svc.cluster.local"
ืืกืืจืื:
- 1 - ืืคืฉืจ RBAC ืจืง ืขืืืจ ืฉืืจืืชืื ืืืจืืื ืฉืืืช ืืจืฉืืืื ืืฉืื
Inclusion
; - 2 - ืื ื ืืคืจืืื ืจืฉืืื ืฉื ืืฉืืจืืชืื ืฉืื ื.
ืืืื ืืืืฉื ืืช ืืชืฆืืจื ืขื ืืคืงืืื ืืืื:
$ kubectl apply -f resource-manifests/istio/security/enable-rbac.yaml
rbacconfig.rbac.istio.io/default created
ืื ืืฉืืจืืชืื ืืืจืฉืื ืืขืช ืืงืจืช ืืืฉื ืืืืกืกืช ืชืคืงืืืื. ืืืืืื ืืืจืืช, ืืืืฉื ืืื ืืฉืืจืืชืื ืืกืืจื ืืชืืจืื ืืชืืืื RBAC: access denied
. ืขืืฉืื ืืืื ื ืืคืฉืจ ืืืฉื ืืืฉืชืืฉืื ืืืจืฉืื.
ืืืฉื ืืชืฆืืจื ืขืืืจ ืืฉืชืืฉืื ืจืืืืื
ืืื ืืืฉืชืืฉืื ืืืืืช ืืืืืช ืืืฉื ืืฉืืจืืชื SA-Frontend ื-SA-WebApp. ืืืืฉื ืืืืฆืขืืช ืืฉืืื Istio ืืืืื:
- ืชืคืงืื ืฉืืจืืช - ืงืืืข ืืช ืืืืืืืช ืฉืืฉ ืืืฉืชืืฉ;
- ืฉืืจืืช RolleBinding - ืงืืืข ืืื ืฉืืื ืชืคืงืื ืฉืืจืืช ืื.
ืืืฉืชืืฉืื ืจืืืืื ื ืืคืฉืจ ืืืฉื ืืฉืืจืืชืื ืืกืืืืื (
apiVersion: "rbac.istio.io/v1alpha1"
kind: ServiceRole
metadata:
name: regular-user
namespace: default
spec:
rules:
- services:
- "sa-frontend.default.svc.cluster.local"
- "sa-web-app.default.svc.cluster.local"
paths: ["*"]
methods: ["*"]
ืืืจื regular-user-binding
ืืื ืืช ืชืคืงืื ืืฉืืจืืช ืขื ืื ืืืืงืจืื ืืืฃ (
apiVersion: "rbac.istio.io/v1alpha1"
kind: ServiceRoleBinding
metadata:
name: regular-user-binding
namespace: default
spec:
subjects:
- user: "*"
roleRef:
kind: ServiceRole
name: "regular-user"
ืืื "ืื ืืืฉืชืืฉืื" ืืืืจ ืฉืืืฉืชืืฉืื ืื ืืืืืชืื ืชืืื ืื ืืืฉื ื-SA WebApp? ืื, ืืืืื ืืืช ืชืืืืง ืืช ืชืืงืคื ืฉื ืืกืืืื JWT.
ืืืื ืืืืฉื ืืช ืืชืฆืืจืืช:
$ kubectl apply -f resource-manifests/istio/security/user-role.yaml
servicerole.rbac.istio.io/regular-user created
servicerolebinding.rbac.istio.io/regular-user-binding created
ืืืฉื ืืชืฆืืจืช ืื ืืืื
ืืื ืืื, ืื ื ืจืืฆืื ืืืคืฉืจ ืืืฉื ืืื ืืฉืืจืืชืื (
apiVersion: "rbac.istio.io/v1alpha1"
kind: ServiceRole
metadata:
name: mod-user
namespace: default
spec:
rules:
- services: ["*"]
paths: ["*"]
methods: ["*"]
ืืื ืื ืื ื ืจืืฆืื ืืืืืืช ืืืื ืจืง ืขืืืจ ืืืชื ืืฉืชืืฉืื ืฉืืกืืืื ืืืืฉื ืฉืืื ืืืื ืชืืืขื https://sa.io/group
ืขื ืืฉืืขืืช Moderators
(
apiVersion: "rbac.istio.io/v1alpha1"
kind: ServiceRoleBinding
metadata:
name: mod-user-binding
namespace: default
spec:
subjects:
- properties:
request.auth.claims[https://sa.io/group]: "Moderators"
roleRef:
kind: ServiceRole
name: "mod-user"
ืืืื ืืืืฉื ืืช ืืชืฆืืจืืช:
$ kubectl apply -f resource-manifests/istio/security/mod-role.yaml
servicerole.rbac.istio.io/mod-user created
servicerolebinding.rbac.istio.io/mod-user-binding created
ืขืงื ืฉืืืจื ืืืืืื ืฉื ืฉืืืืื, ืืืชืื ืฉืืืืคื ืืกืคืจ ืืงืืช ืขื ืฉืืืื ืืืจืฉืื ืืืื ืกื ืืชืืงืฃ. ืืืืจ ืืื ืชืืื ืืืืืื ืฉืืืฉืชืืฉืื ืืืื ืืืื ืืฉ ืจืืืช ืืืฉื ืฉืื ืืช.
ืืกืงื ื ืืืื ืืืืง ืืื
ืืื ืืจืฆืื ืืช, ืืื ืื ืคืขื ืจืืืช ืืืฉื ืคืฉืืื ืืืชืจ, ืืกืจืช ืืืืฅ, ื ืืชื ืช ืืืจืืื ืืืืืื ืืืืืืช ืืืจืฉืื?
ืจืง ืฉืืืฉื ืืฉืืื Istio (RbacConfig, ServiceRole ื-ServiceRoleBinding) ื ืืจืฉื ืืื ืืืฉืื ืฉืืืื ืืืืงืืงืช ืขื ืืืืืช ืืืจืฉืื ืฉื ืืืฉืช ืืฉืชืืฉื ืงืฆื ืืฉืืจืืชืื.
ืื ืืกืฃ, ืืืคืื ื ืื ืืฉืืื ืืื ืืชืื ืฉืืจืืชื ืืฉืืืืื ืฉืื ื, ืืืฉืื ื:
- ืืคืืชืช ืืืืช ืืงืื ืืื ืจื ืฉืขืืื ืืืืื ืืขืืืช ืืืืื ืืืืืื;
- ืฆืืฆืื ืืกืคืจ ืืืฆืืื ืืืืืคืฉืื ืฉืืื ื ืงืืืช ืงืฆื ืืืช ืืชืืจืจื ืื ืืืฉื ืืืืืฅ ืืฉืืื ืืืืื ืขืืื;
- ืืืืื ืืฆืืจื ืืขืืื ืืช ืื ืืฉืืจืืชืื ืืื ืคืขื ืฉืืชืืืกืฃ ืชืคืงืื ืื ืืืืช ืืืฉืื;
- ืฉืฉืืจืืชืื ืืืฉืื ืืืฉืืจื ืคืฉืืืื, ืืืืืืืื ืืืืืจืื.
ืคืื
Istio ืืืคืฉืจืช ืืฆืืืชืื ืืืงื ืืช ืืืฉืืืื ืฉืืื ืืืฉืืืืช ืงืจืืืืืช ืืขืกืง ืืืื ืืืืกืืฃ ืชืงืืจื ืืฉืืจืืชืื, ืืืืืืืจ ืืืชื ืืืฆื ืืืงืจื.
ืืืืืจ (ืืฉืืืฉื ืืืงืื) ืกืืคืง ืืืข ืืกืืกื ืืื ืืืืช ืืขืฉืืืช ืืืื ืืช ืืชืืืืช ืืขืืืื ืขื Istio ืืคืจืืืงืืื ืืืืชืืื.
ื .ื ืืืืชืจืื
ืงืจื ืื ืืืืื ืฉืื ื:
- "ืืืจื ืืฉืืจืืชื ืืืงืจื ืขื Istio":
ืืืง 1 (ืืืื ืืชืืื ืืช ืืขืืงืจืืืช) ,ืืืง 2 (ื ืืชืื, ืืงืจืช ืชื ืืขื) ; - ยซ
Conduit - ืจืฉืช ืฉืืจืืช ืงืืช ืืฉืงื ืขืืืจ Kubernetes "; - ยซ
ืืื ืจืฉืช ืฉืืจืืช ืืืื ืื ื ืฆืจืื ืืืชื [ืขืืืจ ืืคืืืงืฆืืืช ืขื ื ืขื ืืืงืจื-ืฉืืจืืชืื]? ".
ืืงืืจ: www.habr.com