Pokyny k migraci pro konfigurace Open Service Mesh (OSM) do Istio
Důležité
Cílem tohoto článku je lépe pochopit, jak identifikovat konfigurace OSM a přeložit je na ekvivalentní konfigurace Istio pro migraci úloh z OSM na Istio. To není žádným způsobem považováno za vyčerpávající podrobného průvodce.
Tento článek obsahuje praktické pokyny pro mapování zásad OSM na zásady Istio , které vám pomůžou migrovat nasazení mikroslužeb spravovaných osmem na správu istio. Ukázkovou aplikaci osm Bookstore používáme jako základní referenci pro aktuální uživatele OSM. Následující návod nasadí aplikaci Bookstore. Následují se stejné kroky a vysvětlují, jak použít zásady provozu OSM SMI pomocí ekvivalentu Istio.
Pokud osm nepoužíváte a s Istio začínáte, začněte vlastním průvodcem Začínáme istio a zjistěte, jak používat síť služeb Istio pro vaše aplikace. Pokud aktuálně používáte OSM, ujistěte se, že znáte ukázkovou aplikaci OSM Bookstore, jak OSM konfiguruje zásady provozu. Následující názorný postup nezduplikuje aktuální dokumentaci a v případě relevantních odkazů na konkrétní témata. Než budete pokračovat, měli byste být obeznámeni s architekturou aplikací knihkupectví.
Požadavky
- Předplatné Azure. Pokud ještě nemáte předplatné Azure, můžete si vytvořit bezplatný účet.
- Nainstalované rozhraní Azure CLI
- Doplněk OSM AKS se odinstaluje z clusteru AKS.
- Všechny existující aplikace OSM Bookstore, včetně oborů názvů, se odinstalují a odstraní z vašeho clusteru.
- Instalace doplňku Istio AKS service mesh
Úpravy potřebné pro ukázkovou aplikaci osm knihkupectví
Aby mohla istio spravovat aplikaci osm knihkupectví, v existujících manifestech je potřeba provést několik změn. Tyto změny jsou v knihkupectví a službách mysql.
Úpravy knihkupectví
V návodu osm Bookstore se služba knihkupectví nasadí spolu s jinou službou bookstore-v2, která ukazuje, jak OSM zajišťuje posun provozu. Tyto nasazené služby umožňují rozdělit provoz klienta (bookbuyer
) mezi několik koncových bodů služby. První nový koncept, který vám umožní pochopit, jak Istio zpracovává to, co označuje jako posun provozu.
Osm implementace posunu provozu je založená na specifikaci SMI Traffic Split. Specifikace SMI Traffic Split vyžaduje existenci několika služeb nejvyšší úrovně, které se přidají jako back-endy s požadovanou váhu metrikou pro přesun požadavků klientů z jedné služby do druhé. Istio provádí přesun provozu pomocí kombinace virtuální služby a cílového pravidla. Důrazně doporučujeme seznámit se s koncepty virtuální služby i cílového pravidla.
Jednoduše řečeno, virtuální služba Istio definuje pravidla směrování pro klienty, kteří požadují hostitele (název služby). Virtuální služby umožňují přidružit několik verzí nasazení k jednomu názvu hostitele virtuální služby, aby klienti mohli cílit. Pro stejnou službu lze označit více nasazení, která představují různé verze aplikace za stejným názvem hostitele. Virtuální služba Istio se pak dá nakonfigurovat tak, aby vážila požadavek na konkrétní verzi služby. Dostupné verze služby jsou nakonfigurované tak, aby používaly subsets
atribut v cílovém pravidle Istio.
Změna služby a nasazení knihkupectví pro Istio odebere potřebu explicitní druhé služby pro cíl, kterou potřebuje SMI Traffic Split. Pro službu knihkupectví v2 není třeba provádět další účet služby, protože je třeba konsolidovat v rámci služby knihkupectví. Původní úprava manifestu OSM traffic-access-v1.yaml pro Istio pro bookstore verze 1 i v2 se zobrazí v následující části Vytvoření podů, služeb a účtů služeb. Ukážeme si, jak rozdělíme provoz, označovaný jako posun provozu později v průchozím postupu:
Úpravy MySql
Změny stavové sady mysql jsou potřeba jenom v konfiguraci služby. V rámci specifikace služby osm potřebovalo atributy targetPort
a appProtocol
atributy. Tyto atributy nejsou pro Istio potřeba. Následující aktualizovaná služba pro mysqldb vypadá takto:
apiVersion: v1
kind: Service
metadata:
name: mysqldb
labels:
app: mysqldb
service: mysqldb
spec:
ports:
- port: 3306
name: tcp
selector:
app: mysqldb
Nasazení upravené aplikace Bookstore
Podobně jako v návodu osm Bookstore začneme novou instalací aplikace knihkupectví.
Vytvoření oborů názvů
kubectl create namespace bookstore
kubectl create namespace bookbuyer
kubectl create namespace bookthief
kubectl create namespace bookwarehouse
Přidání popisku oboru názvů pro injektáž Istio sidecar
Pro OSM pomocí příkazu osm namespace add <namespace>
vytvořil potřebné poznámky k oboru názvů pro kontroleru OSM pro přidání automatické injektáže sajdkáru. U Istio stačí jen označit obor názvů, který umožní kontroleru Istio být instruován, aby automaticky injektoval proxy proxy sajdkáru Envoy.
kubectl label namespace bookstore istio-injection=enabled
kubectl label namespace bookbuyer istio-injection=enabled
kubectl label namespace bookthief istio-injection=enabled
kubectl label namespace bookwarehouse istio-injection=enabled
Nasazení virtuálního pravidla a cílové služby Istio pro knihkupectví
Jak jsme zmínili dříve v části Úpravy knihkupectví, Istio zpracovává posun provozu pomocí atributu váhy služby VirtualService, který nakonfigurujeme později v návodu. Nasadíme virtuální službu a cílové pravidlo pro službu bookstore. Nasadíme pouze bookstore verze 1, i když je nasazena bookstore verze 2. Virtuální služba Istio poskytuje pouze trasu do verze 1 knihkupectví. Jiné než způsob, jakým OSM zpracovává posun provozu (rozdělení provozu), osm nasadil pro aplikaci bookstore verze 2 jinou službu. OSM potřebuje k nastavení provozu, který se má rozdělit mezi požadavky klientů pomocí TrafficSplit. Při použití posunu provozu s Istio můžeme odkazovat na přesun provozu do několika nasazení aplikací Kubernetes (verze) označených pro stejnou službu.
V tomto návodu se nasazení obou verzí knihkupectví (v1 a v2) nasadí současně. Kvůli konfiguraci virtuální služby je dostupná pouze verze 1. Není nutné nasazovat jinou službu pro bookstore verze 2. Později povolíme trasu do knihkupectví verze 2, když aktualizujeme virtuální službu knihkupectví a poskytneme potřebný atribut váhy pro přesun provozu.
kubectl apply -f - <<EOF
# Create bookstore virtual service
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: bookstore-virtualservice
namespace: bookstore
spec:
hosts:
- bookstore
http:
- route:
- destination:
host: bookstore
subset: v1
---
# Create bookstore destination rule
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: bookstore-destination
namespace: bookstore
spec:
host: bookstore
subsets:
- name: v1
labels:
app: bookstore
version: v1
- name: v2
labels:
app: bookstore
version: v2
EOF
Vytváření podů, služeb a účtů služeb
Používáme jeden soubor manifestu, který obsahuje úpravy probírané dříve v návodu k nasazení bookbuyer
, bookthief
, bookstore
, bookwarehouse
a mysql
aplikací.
kubectl apply -f - <<EOF
##################################################################################################
# bookbuyer service
##################################################################################################
---
# Create bookbuyer Service Account
apiVersion: v1
kind: ServiceAccount
metadata:
name: bookbuyer
namespace: bookbuyer
---
# Create bookbuyer Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: bookbuyer
namespace: bookbuyer
spec:
replicas: 1
selector:
matchLabels:
app: bookbuyer
version: v1
template:
metadata:
labels:
app: bookbuyer
version: v1
spec:
serviceAccountName: bookbuyer
nodeSelector:
kubernetes.io/arch: amd64
kubernetes.io/os: linux
containers:
- name: bookbuyer
image: openservicemesh/bookbuyer:latest-main
imagePullPolicy: Always
command: ["/bookbuyer"]
env:
- name: "BOOKSTORE_NAMESPACE"
value: bookstore
- name: "BOOKSTORE_SVC"
value: bookstore
---
##################################################################################################
# bookthief service
##################################################################################################
---
# Create bookthief ServiceAccount
apiVersion: v1
kind: ServiceAccount
metadata:
name: bookthief
namespace: bookthief
---
# Create bookthief Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: bookthief
namespace: bookthief
spec:
replicas: 1
selector:
matchLabels:
app: bookthief
template:
metadata:
labels:
app: bookthief
version: v1
spec:
serviceAccountName: bookthief
nodeSelector:
kubernetes.io/arch: amd64
kubernetes.io/os: linux
containers:
- name: bookthief
image: openservicemesh/bookthief:latest-main
imagePullPolicy: Always
command: ["/bookthief"]
env:
- name: "BOOKSTORE_NAMESPACE"
value: bookstore
- name: "BOOKSTORE_SVC"
value: bookstore
- name: "BOOKTHIEF_EXPECTED_RESPONSE_CODE"
value: "503"
---
##################################################################################################
# bookstore service version 1 & 2
##################################################################################################
---
# Create bookstore Service
apiVersion: v1
kind: Service
metadata:
name: bookstore
namespace: bookstore
labels:
app: bookstore
spec:
ports:
- port: 14001
name: bookstore-port
selector:
app: bookstore
---
# Create bookstore Service Account
apiVersion: v1
kind: ServiceAccount
metadata:
name: bookstore
namespace: bookstore
---
# Create bookstore-v1 Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: bookstore-v1
namespace: bookstore
spec:
replicas: 1
selector:
matchLabels:
app: bookstore
version: v1
template:
metadata:
labels:
app: bookstore
version: v1
spec:
serviceAccountName: bookstore
nodeSelector:
kubernetes.io/arch: amd64
kubernetes.io/os: linux
containers:
- name: bookstore
image: openservicemesh/bookstore:latest-main
imagePullPolicy: Always
ports:
- containerPort: 14001
name: web
command: ["/bookstore"]
args: ["--port", "14001"]
env:
- name: BOOKWAREHOUSE_NAMESPACE
value: bookwarehouse
- name: IDENTITY
value: bookstore-v1
---
# Create bookstore-v2 Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: bookstore-v2
namespace: bookstore
spec:
replicas: 1
selector:
matchLabels:
app: bookstore
version: v2
template:
metadata:
labels:
app: bookstore
version: v2
spec:
serviceAccountName: bookstore
nodeSelector:
kubernetes.io/arch: amd64
kubernetes.io/os: linux
containers:
- name: bookstore
image: openservicemesh/bookstore:latest-main
imagePullPolicy: Always
ports:
- containerPort: 14001
name: web
command: ["/bookstore"]
args: ["--port", "14001"]
env:
- name: BOOKWAREHOUSE_NAMESPACE
value: bookwarehouse
- name: IDENTITY
value: bookstore-v2
---
##################################################################################################
# bookwarehouse service
##################################################################################################
---
# Create bookwarehouse Service Account
apiVersion: v1
kind: ServiceAccount
metadata:
name: bookwarehouse
namespace: bookwarehouse
---
# Create bookwarehouse Service
apiVersion: v1
kind: Service
metadata:
name: bookwarehouse
namespace: bookwarehouse
labels:
app: bookwarehouse
spec:
ports:
- port: 14001
name: bookwarehouse-port
selector:
app: bookwarehouse
---
# Create bookwarehouse Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: bookwarehouse
namespace: bookwarehouse
spec:
replicas: 1
selector:
matchLabels:
app: bookwarehouse
template:
metadata:
labels:
app: bookwarehouse
version: v1
spec:
serviceAccountName: bookwarehouse
nodeSelector:
kubernetes.io/arch: amd64
kubernetes.io/os: linux
containers:
- name: bookwarehouse
image: openservicemesh/bookwarehouse:latest-main
imagePullPolicy: Always
command: ["/bookwarehouse"]
##################################################################################################
# mysql service
##################################################################################################
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: mysql
namespace: bookwarehouse
---
apiVersion: v1
kind: Service
metadata:
name: mysqldb
labels:
app: mysqldb
service: mysqldb
spec:
ports:
- port: 3306
name: tcp
selector:
app: mysqldb
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql
namespace: bookwarehouse
spec:
serviceName: mysql
replicas: 1
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
serviceAccountName: mysql
nodeSelector:
kubernetes.io/os: linux
containers:
- image: mysql:5.6
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
value: mypassword
- name: MYSQL_DATABASE
value: booksdemo
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- mountPath: /mysql-data
name: data
readinessProbe:
tcpSocket:
port: 3306
initialDelaySeconds: 15
periodSeconds: 10
volumes:
- name: data
emptyDir: {}
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 250M
EOF
Pokud chcete zobrazit tyto prostředky v clusteru, spusťte následující příkazy:
kubectl get pods,deployments,serviceaccounts -n bookbuyer
kubectl get pods,deployments,serviceaccounts -n bookthief
kubectl get pods,deployments,serviceaccounts,services,endpoints -n bookstore
kubectl get pods,deployments,serviceaccounts,services,endpoints -n bookwarehouse
Zobrazení uživatelských rozhraní aplikace
Podobně jako u původního návodu OSM, pokud máte naklonované úložiště OSM, můžete využít skripty pro předávání portů k zobrazení uživatelských rozhraní jednotlivých aplikací zde. Prozatím se zajímáme pouze o zobrazení bookbuyer
uživatelského rozhraní a bookthief
uživatelského rozhraní.
cp .env.example .env
bash <<EOF
./scripts/port-forward-bookbuyer-ui.sh &
./scripts/port-forward-bookthief-ui.sh &
wait
EOF
V prohlížeči otevřete následující adresy URL:
http://localhost:8080 - bookbuyer
http://localhost:8083 - Bookthief
Konfigurace zásad provozu Istio
Abychom zachovali kontinuitu s původním návodem k knihkupectví OSM pro překlad do Istio, probereme režim zásad provozního provozu OSM. Režim zásad podmíněného provozu osm byl koncept povolení nebo zamítnutí provozu v síti bez nasazení konkrétního pravidla řízení přístupu k provozu SMI. Existuje konfigurace režimu provozu, která uživatelům umožňuje připojit aplikace do sítě a současně získat šifrování mTLS, aniž by bylo nutné explicitní pravidla umožňující komunikaci aplikací v síti. Funkce režimu provozu pro uživatele byla proto, aby se zabránilo narušení komunikace vaší aplikace, jakmile ji osm spravoval, a poskytla čas na definování pravidel a zároveň zajistit, aby byla komunikace aplikace šifrovaná pomocí MTLS. Toto nastavení může být nastaveno na true
síť MeshConfig nebo false
přes osm.
Istio zpracovává vynucení mTLS odlišně. Jiný než OSM, istio režim permissive automaticky konfiguruje proxy sajdkáru tak, aby používal mTLS, ale umožňuje službě přijímat přenosy ve formátu prostého textu i mTLS. Ekvivalentem konfigurace režimu osm je využití nastavení Istio PeerAuthentication
. PeerAuthentication
lze provádět podrobné kroky v oboru názvů nebo pro celou síť. Další informace o vynucení MTLS istio najdete v článku o vzájemné migraci tls istio.
Vynucení přísného režimu Istio u oborů názvů knihkupectví
Je důležité si uvědomit, že stejně jako režim permissivního režimu OSM souvisí konfigurace Istio PeerAuthentication
pouze s použitím vynucení mTLS. Skutečné zásady vrstvy 7, podobně jako ty, které se používají v httpRouteGroups osm, se zpracovávají pomocí konfigurací AuthorizationPolicy istio, které se zobrazí později v návodu.
Podrobně jsme umístili bookbuyer
, , bookthief
bookstore
a bookwarehouse
obory názvů v istio mTLS striktní režim.
kubectl apply -f - <<EOF
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
name: bookbuyer
namespace: bookbuyer
spec:
mtls:
mode: STRICT
---
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
name: bookthief
namespace: bookthief
spec:
mtls:
mode: STRICT
---
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
name: bookstore
namespace: bookstore
spec:
mtls:
mode: STRICT
---
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
name: bookwarehouse
namespace: bookwarehouse
spec:
mtls:
mode: STRICT
EOF
Nasazení zásad řízení přístupu Istio
Podobně jako u prostředků SMI Traffic Target a SMI Traffic Specs definují zásady řízení přístupu a směrování, které aplikace komunikují, Istio provádí tyto podobné podrobné kontroly pomocí AuthorizationPolicy
konfigurací.
Pojďme si projít překládání zásad TrafficTarget v knihkupectví, které konkrétně umožňují bookbuyer
komunikaci s ní pouze s některými cestami vrstvy 7, hlavičkami a metodami. Následuje část manifestu traffic-access-v1.yaml .
kind: TrafficTarget
apiVersion: access.smi-spec.io/v1alpha3
metadata:
name: bookstore
namespace: bookstore
spec:
destination:
kind: ServiceAccount
name: bookstore
namespace: bookstore
rules:
- kind: HTTPRouteGroup
name: bookstore-service-routes
matches:
- buy-a-book
- books-bought
sources:
- kind: ServiceAccount
name: bookbuyer
namespace: bookbuyer
---
apiVersion: specs.smi-spec.io/v1alpha4
kind: HTTPRouteGroup
metadata:
name: bookstore-service-routes
namespace: bookstore
spec:
matches:
- name: books-bought
pathRegex: /books-bought
methods:
- GET
headers:
- "user-agent": ".*-http-client/*.*"
- "client-app": "bookbuyer"
- name: buy-a-book
pathRegex: ".*a-book.*new"
methods:
- GET
Pokud si všimnete zásad TrafficTarget, ve specifikaci můžete explicitně definovat, která zdrojová služba může komunikovat s cílovou službou. Vidíme, že umožňujeme zdroji bookbuyer
, aby mohl komunikovat s cílovým knihkupectvem. Pokud přeložíme autorizaci mezi službami z konfigurace OSM TrafficTarget
na Istio AuthorizationPolicy
, vypadá takto:
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
name: bookstore
namespace: bookstore
spec:
selector:
matchLabels:
app: bookstore
action: ALLOW
rules:
- from:
- source:
principals: ["cluster.local/ns/bookbuyer/sa/bookbuyer"]
V istio AuthorizationPolicy
si všimnete, jak je cílová služba zásad OSM TrafficTarget mapována na shodu popisku selektoru a obor názvů, ve kterém se služba nachází. Zdrojová služba se zobrazuje v části pravidel, kde je atribut source/principles, který se mapuje na název účtu služby pro bookbuyer
službu.
Kromě konfigurace zdroje/cíle v OSM TrafficTarget vytvoří OSM vazbu pomocí skupiny HTTPRouteGroup k dalšímu definování autorizace vrstvy 7, ke které má zdroj přístup. Můžeme vidět pouze v části skupiny HTTPRouteGroup níže. Pro povolenou zdrojovou službu existují dva matches
.
apiVersion: specs.smi-spec.io/v1alpha4
kind: HTTPRouteGroup
metadata:
name: bookstore-service-routes
namespace: bookstore
spec:
matches:
- name: books-bought
pathRegex: /books-bought
methods:
- GET
headers:
- "user-agent": ".*-http-client/*.*"
- "client-app": "bookbuyer"
- name: buy-a-book
pathRegex: ".*a-book.*new"
methods:
- GET
match
Existuje názevbooks-bought
, který zdroji umožňuje přístup k cestě /books-bought
pomocí GET
metody s informacemi o uživatelském agentovi hostitele a klientské aplikaci a buy-a-book
shodu, která používá výraz regulárního výrazu pro cestu obsahující .*a-book.*new
metoduGET
.
Tyto konfigurace HTTPRouteGroup osm můžeme definovat v části pravidel istio AuthorizationPolicy
, jak je znázorněno níže:
apiVersion: "security.istio.io/v1beta1"
kind: "AuthorizationPolicy"
metadata:
name: "bookstore"
namespace: bookstore
spec:
selector:
matchLabels:
app: bookstore
action: ALLOW
rules:
- from:
- source:
principals: ["cluster.local/ns/bookbuyer/sa/bookbuyer"]
- source:
namespaces: ["bookbuyer"]
to:
- operation:
methods: ["GET"]
paths: ["*/books-bought", "*/buy-a-book/new"]
- when:
- key: request.headers[User-Agent]
values: ["*-http-client/*"]
- key: request.headers[Client-App]
values: ["bookbuyer"]
Nyní můžeme nasadit migrovaný manifest OSM traffic-access-v1.yaml, jak je vidět níže v Istio. AuthorizationPolicy
Není k dispozici kniha, takže uživatelské rozhraní bookthief by mělo přestat navyšovat knihy z knihkupectví v1:
kubectl apply -f - <<EOF
##################################################################################################
# bookstore policy
##################################################################################################
apiVersion: "security.istio.io/v1beta1"
kind: "AuthorizationPolicy"
metadata:
name: "bookstore"
namespace: bookstore
spec:
selector:
matchLabels:
app: bookstore
action: ALLOW
rules:
- from:
- source:
principals: ["cluster.local/ns/bookbuyer/sa/bookbuyer"]
- source:
namespaces: ["bookbuyer"]
to:
- operation:
methods: ["GET"]
paths: ["*/books-bought", "*/buy-a-book/new"]
- when:
- key: request.headers[User-Agent]
values: ["*-http-client/*"]
- key: request.headers[Client-App]
values: ["bookbuyer"]
---
##################################################################################################
# bookwarehouse policy
##################################################################################################
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
name: "bookwarehouse"
namespace: bookwarehouse
spec:
selector:
matchLabels:
app: bookwarehouse
action: ALLOW
rules:
- from:
- source:
principals: ["cluster.local/ns/bookstore/sa/bookstore"]
- source:
namespaces: ["bookstore"]
to:
- operation:
methods: ["POST"]
---
##################################################################################################
# mysql policy
##################################################################################################
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
name: "mysql"
namespace: bookwarehouse
spec:
selector:
matchLabels:
app: mysql
action: ALLOW
rules:
- from:
- source:
principals: ["cluster.local/ns/bookwarehouse/sa/bookwarehouse"]
- source:
namespaces: ["bookwarehouse"]
to:
- operation:
ports: ["3306"]
EOF
Povolení přístupu k knihkupectví aplikace Bookthief
V současné době neexistuje žádná AuthorizationPolicy
možnost, aby bookthief komunikovat s knihkupectví. Můžeme nasadit následující AuthorizationPolicy
, abychom knihovně umožnili komunikovat s knihkupectví. Všimněte si přidání pravidla pro zásady knihkupectví, které umožňují autorizaci bookthief.
kubectl apply -f - <<EOF
##################################################################################################
# bookstore policy
##################################################################################################
apiVersion: "security.istio.io/v1beta1"
kind: "AuthorizationPolicy"
metadata:
name: "bookstore"
namespace: bookstore
spec:
selector:
matchLabels:
app: bookstore
action: ALLOW
rules:
- from:
- source:
principals: ["cluster.local/ns/bookbuyer/sa/bookbuyer", "cluster.local/ns/bookthief/sa/bookthief"]
- source:
namespaces: ["bookbuyer", "bookthief"]
to:
- operation:
methods: ["GET"]
paths: ["*/books-bought", "*/buy-a-book/new"]
- when:
- key: request.headers[User-Agent]
values: ["*-http-client/*"]
- key: request.headers[Client-App]
values: ["bookbuyer"]
---
##################################################################################################
# bookwarehouse policy
##################################################################################################
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
name: "bookwarehouse"
namespace: bookwarehouse
spec:
selector:
matchLabels:
app: bookwarehouse
action: ALLOW
rules:
- from:
- source:
principals: ["cluster.local/ns/bookstore/sa/bookstore"]
- source:
namespaces: ["bookstore"]
to:
- operation:
methods: ["POST"]
---
##################################################################################################
# mysql policy
##################################################################################################
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
name: "mysql"
namespace: bookwarehouse
spec:
selector:
matchLabels:
app: mysql
action: ALLOW
rules:
- from:
- source:
principals: ["cluster.local/ns/bookwarehouse/sa/bookwarehouse"]
- source:
namespaces: ["bookwarehouse"]
to:
- operation:
ports: ["3306"]
EOF
Uživatelské rozhraní bookthief by teď mělo navýšovat knihy z knihkupectví v1.
Konfigurace posunu provozu mezi dvěma verzemi služby
Předvedení, jak vyrovnávat provoz mezi dvěma verzemi služby Kubernetes, označované jako posun provozu v Istio. Jak si vzpomínáte v předchozí části, implementace posunu provozu osm závisela na nasazení dvou různých služeb a přidání těchto názvů služeb do back-endové konfigurace TrafficTarget
zásad. Tato architektura nasazení není nutná pro to, jak Istio implementuje přesouvání provozu. S istio můžeme vytvořit více nasazení, která představují každou verzi aplikace služby a přesměrovat provoz na tyto konkrétní verze prostřednictvím konfigurace Istio virtualservice
.
Aktuálně nasazené virtualservice
pravidlo směrování má pouze na verzi v1 knihkupectví, jak je znázorněno níže:
spec:
hosts:
- bookstore
http:
- route:
- destination:
host: bookstore
subset: v1
Aktualizujeme virtualservice
100 % hmotnosti na verzi v2 knihkupectví.
kubectl apply -f - <<EOF
# Create bookstore virtual service
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: bookstore-virtualservice
namespace: bookstore
spec:
hosts:
- bookstore
http:
- route:
- destination:
host: bookstore
subset: v1
weight: 0
- destination:
host: bookstore
subset: v2
weight: 100
EOF
Teď byste měli vidět přírůstky bookbuyer
bookthief
uživatelského rozhraní pouze pro bookstore
službu v2. Můžete pokračovat v experimentování změnou atributu weigth
tak, aby se provoz mezi těmito dvěma bookstore
verzemi přesunul.
Shrnutí
Doufáme, že tento návod poskytl nezbytné pokyny k migraci aktuálních zásad OSM na zásady Istio. Dejte si čas a projděte si vlastní příručku Začínáme pro Istio a zjistěte, jak používat síť služby Istio ke správě aplikací.
Azure Kubernetes Service