Migratierichtlijnen voor OsM-configuraties (Open Service Mesh) naar Istio
Belangrijk
Dit artikel is bedoeld om een simplistisch begrip te bieden van het identificeren van OSM-configuraties en deze te vertalen naar equivalente Istio-configuraties voor het migreren van workloads van OSM naar Istio. Dit wordt in geen enkel verband beschouwd als een uitgebreide gedetailleerde handleiding.
Dit artikel bevat praktische richtlijnen voor het toewijzen van OSM-beleid aan het Istio-beleid om te helpen bij het migreren van uw microservicesimplementaties die worden beheerd door OSM naar worden beheerd door Istio. We gebruiken de OSM Bookstore-voorbeeldtoepassing als basisverwijzing voor huidige OSM-gebruikers. In de volgende procedure wordt de Bookstore-toepassing geïmplementeerd. Dezelfde stappen worden gevolgd en uitgelegd hoe u het OSM SMI-verkeersbeleid toepast met behulp van het Istio-equivalent.
Als u osm niet gebruikt en nog niet in Istio werkt, begint u met de eigen introductiehandleiding van Istio om te leren hoe u de Istio-service-mesh voor uw toepassingen gebruikt. Als u momenteel OSM gebruikt, moet u ervoor zorgen dat u bekend bent met de voorbeeldtoepassing OSM Bookstore over de wijze waarop OSM verkeersbeleid configureert. In het volgende overzicht wordt de huidige documentatie niet gedupliceerd en wordt verwezen naar specifieke onderwerpen wanneer dit relevant is. U moet vertrouwd en volledig op de hoogte zijn van de architectuur van de bookstore-toepassing voordat u doorgaat.
Vereisten
- Een Azure-abonnement. Als u geen Azure-abonnement hebt, kunt u een gratis account maken.
- Azure CLI geïnstalleerd.
- De OSM AKS-invoegtoepassing wordt verwijderd uit uw AKS-cluster
- Elke bestaande OSM Bookstore-toepassing, inclusief naamruimten, wordt verwijderd en verwijderd uit uw cluster
- De Mesh-invoegtoepassing voor de Istio AKS-service installeren
Wijzigingen die nodig zijn voor de OSM Sample Bookstore-toepassing
Om Ervoor te zorgen dat Istio de OSM-boekstoretoepassing kan beheren, zijn er een aantal wijzigingen nodig in de bestaande manifesten. Deze wijzigingen zijn bij de bookstore en de mysql-services.
Wijzigingen in boekhandel
In het overzicht van de OSM Bookstore wordt de bookstore-service samen met een andere bookstore-v2-service geïmplementeerd om te laten zien hoe OSM verkeer verschuift. Met deze geïmplementeerde services kunt u het clientverkeer (bookbuyer
) splitsen tussen meerdere service-eindpunten. Het eerste nieuwe concept om te begrijpen hoe Istio omgaat met wat ze noemen als Traffic Shifting.
OSM-implementatie van verkeerverschuiving is gebaseerd op de SMI Traffic Split-specificatie. De SMI Traffic Split-specificatie vereist het bestaan van meerdere services op het hoogste niveau die worden toegevoegd als back-ends met de gewenste gewichtsmetriek om clientaanvragen van de ene service naar de andere te verplaatsen. Istio voert verkeerverschuifing uit met behulp van een combinatie van een virtuele service en een doelregel. Het wordt ten zeerste aanbevolen om vertrouwd te raken met zowel de concepten van een virtuele service als de doelregel.
Eenvoudig gezegd definieert de virtuele Istio-service routeringsregels voor clients die de host (servicenaam) aanvragen. Met Virtual Services kunnen meerdere versies van een implementatie worden gekoppeld aan één hostnaam van een virtuele service, zodat clients zich kunnen richten. Meerdere implementaties kunnen worden gelabeld voor dezelfde service, die verschillende versies van de toepassing achter dezelfde hostnaam vertegenwoordigen. De virtuele Istio-service kan vervolgens worden geconfigureerd om de aanvraag te wegen naar een specifieke versie van de service. De beschikbare versies van de service zijn geconfigureerd voor het gebruik van het subsets
kenmerk in een Istio-doelregel.
De wijziging van de bookstore-service en -implementatie voor Istio verwijdert de noodzaak om een expliciete tweede service te hebben die moet worden gericht op de SMI-verkeerssplitsing. Er is ook geen ander serviceaccount nodig voor de bookstore v2-service, omdat het moet worden geconsolideerd onder de bookstore-service. Het oorspronkelijke OSM traffic-access-v1.yaml-manifest wordt gewijzigd in Istio voor zowel de bookstore v1 als v2 in de onderstaande sectie Pods, Services en ServiceAccounts maken. We laten zien hoe we verkeer splitsen, ook wel verkeer verschuiven later in het overzicht:
MySql-wijzigingen
Wijzigingen in de stateful set mysql zijn alleen nodig in de serviceconfiguratie. Onder de servicespecificatie had OSM de targetPort
en appProtocol
kenmerken nodig. Deze kenmerken zijn niet nodig voor Istio. De volgende bijgewerkte service voor mysqldb ziet er als volgt uit:
apiVersion: v1
kind: Service
metadata:
name: mysqldb
labels:
app: mysqldb
service: mysqldb
spec:
ports:
- port: 3306
name: tcp
selector:
app: mysqldb
De gewijzigde bookstoretoepassing implementeren
Net als bij de walk-through van de OSM Bookstore beginnen we met een nieuwe installatie van de bookstore-toepassing.
De naamruimten maken
kubectl create namespace bookstore
kubectl create namespace bookbuyer
kubectl create namespace bookthief
kubectl create namespace bookwarehouse
Een naamruimtelabel toevoegen voor Istio sidecar-injectie
Voor OSM hebt u met behulp van de opdracht osm namespace add <namespace>
de benodigde aantekeningen gemaakt voor de naamruimte voor de OSM-controller om automatische sidecar-injectie toe te voegen. Met Istio hoeft u alleen maar een naamruimte te labelen zodat de Istio-controller kan worden geïnstrueerd om automatisch de sidecarproxy's van Envoy te injecteren.
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
De virtuele Istio-service- en doelregel implementeren voor bookstore
Zoals eerder vermeld in de sectie Bookstore Modification, verwerkt Istio verkeersverschuiving met behulp van een kenmerk voor het gewicht van virtualservice dat we later in het overzicht configureren. We implementeren de virtuele service en doelregel voor de bookstore-service. We implementeren alleen de boekwinkel versie 1, ook al wordt de bookstore versie 2 geïmplementeerd. De virtuele Istio-service levert alleen een route naar de versie 1 van de boekhandel. Afgezien van de manier waarop OSM verkeer verschuift (verkeer splitsen), heeft OSM een andere service geïmplementeerd voor de bookstore versie 2-toepassing. OSM moest verkeer instellen dat moet worden gesplitst tussen clientaanvragen met behulp van een TrafficSplit. Wanneer u verkeer verplaatst met Istio, kunnen we verwijzen naar het verplaatsen van verkeer naar meerdere Kubernetes-toepassingsimplementaties (versies) die zijn gelabeld voor dezelfde service.
In deze walk-though wordt de implementatie van beide boekstoreversies (v1 & v2) tegelijkertijd geïmplementeerd. Alleen versie 1 is bereikbaar vanwege de configuratie van de virtuele service. U hoeft geen andere service te implementeren voor bookstore versie 2, we schakelen later een route naar de bookstore versie 2 in wanneer we de virtuele service van de bookstore bijwerken en het benodigde gewichtskenmerk opgeven om verkeer te verplaatsen.
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
Pods, services en serviceaccounts maken
We gebruiken één manifestbestand dat de wijzigingen bevat die eerder in het overzicht zijn besproken om de bookbuyer
, bookthief
, bookstore
, en mysql
bookwarehouse
toepassingen te implementeren.
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
Voer de volgende opdrachten uit om deze resources op uw cluster weer te geven:
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
De toepassings-UIS's weergeven
Net als in het oorspronkelijke OSM-overzicht kunt u, als u de OSM-opslagplaats hebt gekloond, de scripts voor het doorsturen van poorten gebruiken om de UIS's van elke toepassing hier weer te geven. Voorlopig zijn we alleen bezorgd om de gebruikersinterface en bookthief
de bookbuyer
gebruikersinterface te bekijken.
cp .env.example .env
bash <<EOF
./scripts/port-forward-bookbuyer-ui.sh &
./scripts/port-forward-bookthief-ui.sh &
wait
EOF
Open in een browser de volgende URL's:
http://localhost:8080 - bookbuyer
http://localhost:8083 - boekdief
Verkeersbeleid van Istio configureren
Om de continuïteit te behouden met de oorspronkelijke walk-through van de OSM Bookstore voor de vertaling naar Istio, bespreken we de permissive Traffic Policy Mode van OSM. De permissieve verkeersbeleidsmodus van OSM was een concept van het toestaan of weigeren van verkeer in de mesh zonder dat er een specifieke SMI-regel voor toegangsbeheer voor verkeer is geïmplementeerd. De configuratie van de missieve verkeersmodus bestond om gebruikers toe te staan toepassingen in de mesh te onboarden, terwijl mTLS-versleuteling wordt opgehaald, zonder dat expliciete regels nodig zijn om toepassingen in de mesh te laten communiceren. De functie voor de missieve verkeersmodus was om te voorkomen dat de communicatie van uw toepassing wordt onderbroken zodra OSM deze heeft beheerd, en om tijd te bieden om uw regels te definiëren en ervoor te zorgen dat toepassingscommunicatie mTLS is versleuteld. Deze instelling kan worden ingesteld op true
of false
via de MeshConfig van OSM.
Istio verwerkt mTLS-afdwinging anders. Anders dan OSM configureert de permissieve modus van Istio automatisch sidecarproxy's voor het gebruik van mTLS, maar staat de service toe om zowel plaintext- als mTLS-verkeer te accepteren. Het equivalent van de configuratie van de permissieve modus van OSM is het gebruik van de instellingen van PeerAuthentication
Istio. PeerAuthentication
kan nauwkeurig worden uitgevoerd op de naamruimte of voor de hele mesh. Lees het artikel over wederzijdse TLS-migratie van Istio voor meer informatie over het afdwingen van mTLS.
Istio Strict Mode afdwingen voor bookstore-naamruimten
Het is belangrijk om te onthouden, net zoals de permissieve modus van OSM, is de configuratie van PeerAuthentication
Istio alleen gerelateerd aan het gebruik van mTLS-afdwinging. Werkelijke laag-7-beleidsregels, net zoals die worden gebruikt in HTTPRouteGroups van OSM, worden verwerkt met behulp van de AuthorizationPolicy-configuraties van Istio die u later in het overzicht ziet.
We plaatsen de , bookthief
, en bookwarehouse
bookstore
naamruimten gedetailleerd in de bookbuyer
strikte modus van Istio.
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
Istio-toegangsbeheerbeleid implementeren
Net als bij SMI Traffic Target en SMI Traffic Specs resources van OSM om toegangsbeheer en routeringsbeleid te definiëren voor de toepassingen om te communiceren, voert Istio deze vergelijkbare verfijnde besturingselementen uit met behulp van AuthorizationPolicy
configuraties.
Laten we eens kijken naar het vertalen van het traffictarget-beleid van de boekwinkel, waarmee het bookbuyer
specifiek kan communiceren, met alleen een bepaald laag-7-pad, -headers en -methoden. Hier volgt een deel van het traffic-access-v1.yaml-manifest .
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
Als u merkt onder het TrafficTarget-beleid, kunt u in de specificatie expliciet definiëren welke bronservice kan communiceren met een doelservice. We kunnen zien dat we toestaan dat de bron bookbuyer
kan worden geautoriseerd om te communiceren met de doelboekwinkel. Als we de service-naar-service-autorisatie vertalen van een OSM-configuratie TrafficTarget
naar een Istio AuthorizationPolicy
, ziet dit er als volgt uit:
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"]
In de Istio's AuthorizationPolicy
ziet u hoe de doelservice van het OSM TrafficTarget-beleid is toegewezen aan de selectorlabelovereenkomst en de naamruimte waarin de service zich bevindt. De bronservice wordt weergegeven in de sectie Regels waar een bron-/principeskenmerk is dat is toegewezen aan de naam van het serviceaccount voor de bookbuyer
service.
Naast alleen de bron-/doelconfiguratie in osm TrafficTarget verbindt OSM het gebruik van een HTTPRouteGroup om de laag-7-autorisatie waar de bron toegang toe heeft verder te definiëren. We kunnen dit zien in alleen het gedeelte van de HTTPRouteGroup hieronder. Er zijn twee matches
voor de toegestane bronservice.
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
Er is een match
benoemde naam books-bought
waarmee de bron toegang heeft tot het pad /books-bought
met behulp van een GET
methode met hostheadergebruikersagent- en client-app-informatie en een buy-a-book
overeenkomst die gebruikmaakt van een regex-express voor een pad dat een GET
methode bevat.*a-book.*new
.
We kunnen deze OSM HTTPRouteGroup-configuraties definiëren in de sectie regels van de istio AuthorizationPolicy
die hieronder wordt weergegeven:
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"]
We kunnen nu het osm gemigreerd traffic-access-v1.yaml-manifest implementeren, zoals hieronder wordt begrepen door Istio. Er is geen AuthorizationPolicy
voor de bookthief, dus de bookthief-gebruikersinterface moet stoppen met het verhogen van boeken uit de boekwinkel 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
De Bookthief-toepassing toegang geven tot Bookstore
Op dit moment is er geen AuthorizationPolicy
mogelijkheid om het boekdief te laten communiceren met de boekwinkel. We kunnen het volgende AuthorizationPolicy
implementeren om het boekdief te laten communiceren met de boekhandel. U ziet de toevoeging voor de regel voor het boekwinkelbeleid waarmee de autorisatie van bookthief is toegestaan.
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
De bookthief-gebruikersinterface moet nu boeken uit de boekwinkel v1 verhogen.
Traffic Shifting tussen twee serviceversies configureren
Om te laten zien hoe u verkeer kunt verdelen tussen twee versies van een Kubernetes-service, ook wel verkeer verplaatsen in Istio. Zoals u zich in een vorige sectie herinnert, is osm-implementatie van verkeer die wordt verplaatst afhankelijk van twee afzonderlijke services die worden geïmplementeerd en die servicenamen toevoegen aan de back-endconfiguratie van het TrafficTarget
beleid. Deze implementatiearchitectuur is niet nodig voor de wijze waarop Istio verkeer verschuift. Met Istio kunnen we meerdere implementaties maken die elke versie van de servicetoepassing vertegenwoordigen en verkeer naar die specifieke versies verplaatsen via de Istio-configuratie virtualservice
.
De momenteel geïmplementeerde virtualservice
regel heeft alleen een routeregel naar de v1-versie van de boekwinkel die hieronder wordt weergegeven:
spec:
hosts:
- bookstore
http:
- route:
- destination:
host: bookstore
subset: v1
We werken het virtualservice
bij om 100% van het gewicht te verplaatsen naar de v2-versie van de boekhandel.
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
Als het goed is, ziet u nu alleen het verhogen van de bookbuyer
bookthief
gebruikersinterface voor de bookstore
v2-service. U kunt blijven experimenteren door het weigth
kenmerk te wijzigen om verkeer tussen de twee bookstore
versies te verplaatsen.
Samenvatting
We hopen dat deze procedure de nodige richtlijnen biedt voor het migreren van uw huidige OSM-beleid naar Istio-beleid. Neem tijd en bekijk de Istio-concepten en doorloop de eigen Introductiehandleiding van Istio om te leren hoe u de Istio-service-mesh gebruikt om uw toepassingen te beheren.
Azure Kubernetes Service