Migreringsvägledning för OSM-konfigurationer (Open Service Mesh) till Istio
Viktigt!
Den här artikeln syftar till att ge en förenklad förståelse för hur du identifierar OSM-konfigurationer och översätter dem till motsvarande Istio-konfigurationer för migrering av arbetsbelastningar från OSM till Istio. Detta anses inte på något sätt vara en uttömmande detaljerad vägledning.
Den här artikeln innehåller praktisk vägledning för att mappa OSM-principer till Istio-principerna för att migrera dina mikrotjänstdistributioner som hanteras av OSM till att hanteras av Istio. Vi använder OSM Bookstore-exempelprogrammet som basreferens för aktuella OSM-användare. Följande genomgång distribuerar Bokhandelsprogrammet. Samma steg följs och förklarar hur du tillämpar OSM SMI-trafikprinciperna med hjälp av Istio-motsvarigheten.
Om du inte använder OSM och är nybörjare på Istio börjar du med Istios egen Komma igång guide för att lära dig hur du använder Istio-tjänstnätet för dina program. Om du för närvarande använder OSM kontrollerar du att du är bekant med OSM Bookstore-exempelprogrammets genomgång av hur OSM konfigurerar trafikprinciper. Följande genomgång duplicerar inte den aktuella dokumentationen och refererar till specifika ämnen när det är relevant. Du bör vara bekväm och fullt medveten om bokhandelsprogrammets arkitektur innan du fortsätter.
Förutsättningar
- En Azure-prenumeration. Om du inte har någon Azure-prenumeration kan du skapa ett kostnadsfritt konto.
- Azure CLI installerat.
- OSM AKS-tillägget avinstalleras från ditt AKS-kluster
- Alla befintliga OSM Bookstore-program, inklusive namnområden, avinstalleras och tas bort från klustret
- Installera tillägget Istio AKS-tjänstnät
Ändringar som behövs i OSM-exempelbokhandelsprogrammet
För att Istio ska kunna hantera OSM-bokhandelsprogrammet behövs ett par ändringar i de befintliga manifesten. Dessa ändringar är med bokhandeln och mysql-tjänsterna.
Ändringar i bokhandeln
I osm-bokhandelns genomgång distribueras bokhandelstjänsten tillsammans med en annan bokhandels-v2-tjänst för att visa hur OSM tillhandahåller trafikväxling. Med de här distribuerade tjänsterna kunde du dela upp klienttrafiken (bookbuyer
) mellan flera tjänstslutpunkter. Det första nya konceptet för att förstå hur Istio hanterar vad de kallar trafikväxling.
OSM-implementeringen av trafikväxling baseras på SMI Traffic Split-specifikationen. SMI Traffic Split-specifikationen kräver att det finns flera tjänster på toppnivå som läggs till som serverdelar med önskat viktmått för att flytta klientbegäranden från en tjänst till en annan. Istio utför trafikväxling med hjälp av en kombination av en virtuell tjänst och en målregel. Vi rekommenderar starkt att du bekantar dig med både begreppen för en virtuell tjänst och målregel.
Enkelt uttryckt definierar den virtuella Istio-tjänsten routningsregler för klienter som begär värden (tjänstnamn). Med Virtual Services kan flera versioner av en distribution associeras till ett virtuellt tjänstvärdnamn för klienter som ska riktas. Flera distributioner kan märkas för samma tjänst, vilket representerar olika versioner av programmet bakom samma värdnamn. Den virtuella Istio-tjänsten kan sedan konfigureras för att vikta begäran till en viss version av tjänsten. De tillgängliga versionerna av tjänsten är konfigurerade för att använda subsets
attributet i en Istio-målregel.
Ändringen av bokhandelstjänsten och distributionen för Istio tar bort behovet av att ha en explicit andra tjänst att rikta in sig på, vilket SMI Traffic Split behöver. Det finns inget behov av ett annat tjänstkonto för bokhandelstjänsten v2 också, eftersom det ska konsolideras under bokhandelstjänsten. Den ursprungliga OSM-manifeständringen traffic-access-v1.yaml till Istio för både bokhandeln v1 och v2 visas i avsnittet Skapa poddar, tjänster och tjänstkonton nedan. Vi visar hur vi delar upp trafiken, så kallad trafikförskjutning senare i genomgången:
MySql-ändringar
Ändringar i den tillståndskänsliga mysql-uppsättningen behövs bara i tjänstkonfigurationen. Enligt tjänstspecifikationen behövde OSM attributen targetPort
och appProtocol
. Dessa attribut behövs inte för Istio. Följande uppdaterade tjänst för mysqldb ser ut så här:
apiVersion: v1
kind: Service
metadata:
name: mysqldb
labels:
app: mysqldb
service: mysqldb
spec:
ports:
- port: 3306
name: tcp
selector:
app: mysqldb
Distribuera det ändrade bokhandelsprogrammet
På samma sätt som osm-bokhandelns genomgång börjar vi med en ny installation av bokhandelsprogrammet.
Skapa namnrymderna
kubectl create namespace bookstore
kubectl create namespace bookbuyer
kubectl create namespace bookthief
kubectl create namespace bookwarehouse
Lägg till en namnområdesetikett för Inmatning av sidovagn i Istio
För OSM skapade kommandot osm namespace add <namespace>
nödvändiga anteckningar till namnområdet för OSM-styrenheten för att lägga till automatisk sidovagnsinmatning. Med Istio behöver du bara märka ett namnområde så att Istio-kontrollanten kan instrueras att automatiskt mata in envoy-proxyservrarna för sidovagn.
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
Distribuera den virtuella Istio-tjänsten och målregeln för bokhandel
Som tidigare nämnts i avsnittet Ändring av bokhandel hanterar Istio trafikväxling med hjälp av ett VirtualService-viktattribut som vi konfigurerar senare i genomgången. Vi distribuerar den virtuella tjänsten och målregeln för bokhandelstjänsten. Vi distribuerar endast bokhandeln version 1 trots att bokhandeln version 2 har distribuerats. Den virtuella Istio-tjänsten tillhandahåller bara en väg till version 1 av bokhandeln. OsM, som skiljer sig från hur OSM hanterar trafikväxling (trafikdelning), distribuerade en annan tjänst för bokhandelns version 2-program. OSM behövde konfigurera trafik som ska delas mellan klientbegäranden med hjälp av en TrafficSplit. När du använder trafikväxling med Istio kan vi referera till att flytta trafik till flera Kubernetes-programdistributioner (versioner) märkta för samma tjänst.
I den här genomgången distribueras distributionen av båda bokhandelsversionerna (v1 & v2) samtidigt. Endast version 1 kan nås på grund av konfigurationen av den virtuella tjänsten. Det finns inget behov av att distribuera en annan tjänst för bokhandel version 2, vi aktiverar en väg till bokhandeln version 2 senare när vi uppdaterar den virtuella bokhandelns virtuella tjänst och tillhandahåller det viktattribut som krävs för att utföra trafikväxling.
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
Skapa poddar, tjänster och tjänstkonton
Vi använder en enda manifestfil som innehåller de ändringar som beskrevs tidigare i genomgången för att distribuera bookbuyer
programmen , bookthief
, bookstore
, bookwarehouse
och mysql
.
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
Om du vill visa dessa resurser i klustret kör du följande kommandon:
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
Visa program-UIs
På samma sätt som den ursprungliga OSM-genomgången kan du använda portvidarebefordringsskripten för att visa UIs för varje program här om du har klonat OSM-lagringsplatsen. För tillfället är vi bara intresserade av att visa användargränssnittet bookbuyer
och bookthief
.
cp .env.example .env
bash <<EOF
./scripts/port-forward-bookbuyer-ui.sh &
./scripts/port-forward-bookthief-ui.sh &
wait
EOF
Öppna följande URL:ar i en webbläsare:
http://localhost:8080 - bokköpare
http://localhost:8083 - bookthief
Konfigurera Istios trafikprinciper
För att upprätthålla kontinuiteten med den ursprungliga OSM-bokhandelns genomgång för översättningen till Istio diskuterar vi OSM:s tillåtande trafikprincipläge. OSM:s tillåtande trafikprincipläge var ett begrepp om att tillåta eller neka trafik i nätet utan någon specifik SMI-trafikåtkomstkontrollregel distribuerad. Den tillåtande trafiklägeskonfigurationen fanns för att tillåta användare att registrera program i nätet, samtidigt som de fick mTLS-kryptering, utan att kräva explicita regler för att tillåta att program i nätet kommunicerar. Den tillåtande trafiklägesfunktionen var att undvika att bryta kommunikationen för ditt program så snart OSM hanterade det och ge tid att definiera dina regler samtidigt som du säkerställde att programkommunikationen var mTLS-krypterad. Den här inställningen kan anges till true
eller false
via OSM:s MeshConfig.
Istio hanterar mTLS-tvingande på olika sätt. Till skillnad från OSM konfigurerar Istios tillåtande läge automatiskt sidovagnsproxys för att använda mTLS, men tillåter att tjänsten accepterar både klartext- och mTLS-trafik. Motsvarigheten till OSM:s tillåtande lägeskonfiguration är att använda Istios PeerAuthentication
inställningar. PeerAuthentication
kan göras detaljerat i namnområdet eller för hela nätet. Mer information om Istios tillämpning av mTLS finns i artikeln Istio Mutual TLS Migration( Istio Mutual TLS Migration).
Framtvinga strikt Istio-läge på bokhandelsnamnområden
Det är viktigt att komma ihåg, precis som OSM:s tillåtande läge, att Istios PeerAuthentication
konfiguration endast är relaterad till användningen av mTLS-tillämpning. Faktiska layer-7-principer, ungefär som de som används i OSM:s HTTPRouteGroups, hanteras med hjälp av Istios AuthorizationPolicy-konfigurationer som du ser senare i genomgången.
Vi placerar bookbuyer
granularly namnrymderna , bookthief
, bookstore
och bookwarehouse
i Istios strikta mTLS-läge.
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
Distribuera Principer för Istio-åtkomstkontroll
Precis som OSM:s SMI Traffic Target - och SMI Traffic Specs-resurser för att definiera åtkomstkontroll och routningsprinciper för de program som ska kommunicera, utför Istio dessa liknande detaljerade kontroller med hjälp AuthorizationPolicy
av konfigurationer.
Nu ska vi gå igenom översättningen av principen TrafficTarget för bokhandeln, som specifikt gör det möjligt bookbuyer
att kommunicera med den, med endast vissa layer-7-sökvägar, rubriker och metoder. Följande är en del av manifestet 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
Om du märker under TrafficTarget-principen är det i specifikationen där du uttryckligen kan definiera vilken källtjänst som kan kommunicera med en måltjänst. Vi kan se att vi tillåter att källan bookbuyer
har behörighet att kommunicera med målbokhandeln. Om vi översätter tjänst-till-tjänst-auktoriseringen från en OSM-konfiguration TrafficTarget
till en Istio AuthorizationPolicy
ser det ut så här nedan:
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"]
I Istios märker du hur OSM TrafficTarget-principmåltjänsten mappas AuthorizationPolicy
till väljarens etikettmatchning och namnområdet som tjänsten finns i. Källtjänsten visas under regelavsnittet där det finns ett käll-/principattribut som mappar till tjänstens bookbuyer
tjänstkontonamn.
Förutom bara käll-/målkonfigurationen i OSM TrafficTarget binder OSM användningen av en HTTPRouteGroup för att ytterligare definiera den layer-7-auktorisering som källan har åtkomst till. Vi kan se i bara delen av HTTPRouteGroup nedan. Det finns två matches
för den tillåtna källtjänsten.
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
Det finns ett match
namn books-bought
som gör att källan kan komma åt sökvägen /books-bought
med hjälp av en GET
metod med användaragent för värdhuvud och klientappsinformation och en buy-a-book
matchning som använder en regex-express för en sökväg som innehåller .*a-book.*new
en GET
metod.
Vi kan definiera dessa OSM HTTPRouteGroup-konfigurationer i regelavsnittet i Istio AuthorizationPolicy
som visas nedan:
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"]
Nu kan vi distribuera OSM-manifestet traffic-access-v1.yaml enligt istio nedan. Det finns ingen AuthorizationPolicy
för bookthief, så bookthief UI bör sluta öka böcker från bokhandel 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
Tillåter att Bookthief-programmet får åtkomst till bokhandeln
För närvarande finns det inget AuthorizationPolicy
som tillåter att bookthief kommunicerar med bokhandeln. Vi kan distribuera följande AuthorizationPolicy
så att bookthief kan kommunicera med bokhandeln. Du märker tillägget för regeln för bokhandelsprincipen som tillåter bookthief-auktorisering.
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
Bookthief UI bör nu öka böcker från bokhandeln v1.
Konfigurera trafikväxling mellan två tjänstversioner
För att visa hur du balanserar trafik mellan två versioner av en Kubernetes-tjänst, så kallad trafikväxling i Istio. Som du minns i ett tidigare avsnitt förlitade sig OSM-implementeringen av trafikväxling på två distinkta tjänster som distribuerades och lade till dessa tjänstnamn i serverdelskonfigurationen TrafficTarget
av principen. Den här distributionsarkitekturen behövs inte för hur Istio implementerar trafikväxling. Med Istio kan vi skapa flera distributioner som representerar varje version av tjänstprogrammet och flytta trafik till dessa specifika versioner via Istio-konfigurationen virtualservice
.
Den för närvarande distribuerade har bara en routningsregel virtualservice
till v1-versionen av bokhandeln som visas nedan:
spec:
hosts:
- bookstore
http:
- route:
- destination:
host: bookstore
subset: v1
Vi uppdaterar virtualservice
för att flytta 100 % av vikten till v2-versionen av bokhandeln.
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
Nu bör både användargränssnittet bookbuyer
och bookthief
ökas för bookstore
v2-tjänsten. Du kan fortsätta att experimentera genom att ändra weigth
attributet för att flytta trafik mellan de två bookstore
versionerna.
Sammanfattning
Vi hoppas att den här genomgången gav nödvändig vägledning om hur du migrerar dina aktuella OSM-principer till Istio-principer. Ta dig tid och granska Istio-begreppen och gå igenom Istios egen Komma igång guide för att lära dig hur du använder Istio-tjänstnätet för att hantera dina program.
Azure Kubernetes Service