Руководство по миграции конфигураций Open Service Mesh (OSM) в Istio
Внимание
Эта статья направлена на упрощенное понимание того, как определить конфигурации OSM и преобразовать их в эквивалентные конфигурации Istio для переноса рабочих нагрузок из OSM в Istio. Это не означает, что это исчерпывающее подробное руководство.
В этой статье приведены практические рекомендации по сопоставлению политик OSM с политиками Istio , которые помогут перенести развертывания микрослужб, управляемые OSM, на управление с помощью Istio. Мы используем пример приложения OSM Bookstore в качестве базовой ссылки для текущих пользователей OSM. В следующем пошаговом руководстве развертывается приложение Bookstore. Выполните те же действия и объясните, как применить политики трафика SMI OSM с помощью эквивалента Istio.
Если вы не используете OSM и не знакомы с Istio, начните с собственного руководства по началу работы Istio, чтобы узнать, как использовать сетку службы Istio для ваших приложений. Если вы используете OSM в настоящее время, убедитесь, что вы знакомы с примером приложения OSM Bookstore, чтобы узнать, как OSM настраивает политики трафика. Следующий пошаговое руководство не дублирует текущую документацию и ссылается на определенные разделы при необходимости. Прежде чем продолжить, вы должны быть комфортно и полностью осведомлены об архитектуре приложения bookstore.
Необходимые компоненты
- Подписка Azure. Если у вас еще нет подписки Azure, вы можете создать бесплатную учетную запись.
- Установленный Azure CLI.
- Надстройка OSM AKS удаляется из кластера AKS.
- Любое существующее приложение OSM Bookstore, включая пространства имен, удаляется и удаляется из кластера.
- Установка надстройки сетки службы Istio AKS
Изменения, необходимые для примера приложения Bookstore OSM
Чтобы разрешить Istio управлять приложением bookstore OSM, в существующих манифестах необходимо несколько изменений. Эти изменения связаны с книжным хранилищем и службами mysql.
Изменения bookstore
В пошаговом руководстве по OSM Bookstore служба книжного хранилища развертывается вместе с другой службой bookstore-v2, чтобы продемонстрировать, как OSM обеспечивает смену трафика. Эти развернутые службы позволяют разделить трафик клиента (bookbuyer
) между несколькими конечными точками службы. Первая новая концепция, чтобы понять, как Istio обрабатывает то, что они называют сменой трафика.
Реализация смены трафика OSM основана на спецификации разделения трафика SMI. Спецификация разделения трафика SMI требует наличия нескольких служб верхнего уровня, которые добавляются в качестве серверной части с требуемой метрикой веса, чтобы переместить клиентские запросы из одной службы в другую. Istio выполняет смену трафика с помощью сочетания виртуальной службы и правила назначения. Настоятельно рекомендуется ознакомиться как с понятиями виртуальной службы, так и с правилом назначения.
Проще говоря, виртуальная служба Istio определяет правила маршрутизации для клиентов, запрашивающих узел (имя службы). Виртуальные службы позволяют связать несколько версий развертывания с одним именем узла виртуальной службы для целевых клиентов. Для одной службы можно наметить несколько развертываний, представляющих разные версии приложения за одинаковым именем узла. Затем виртуальная служба Istio может быть настроена для веса запроса в определенную версию службы. Доступные версии службы настроены для использования subsets
атрибута в правиле назначения Istio.
Изменение, внесенное в службу хранилища книг и развертывание для Istio, удаляет необходимость явной второй службы для целевой цели, для которой требуется разделение трафика SMI. Нет необходимости в другой учетной записи службы для службы bookstore версии 2, так как она должна быть консолидирована в службе книжного хранилища. Исходные изменения манифеста OSM traffic-access-v1.yaml в Istio для книжного магазина версии 1 и версии 2 показаны в разделе "Создание модулей pod, служб и учетных записей служб". Мы покажем, как разделить трафик, известный как сдвиг трафика далее в пошаговом руководстве:
Изменения MySql
Изменения в наборе состояния mysql необходимы только в конфигурации службы. В спецификации службы OSM требовались targetPort
и appProtocol
атрибуты. Эти атрибуты не нужны для Istio. Следующая обновленная служба для mysqldb выглядит следующим образом:
apiVersion: v1
kind: Service
metadata:
name: mysqldb
labels:
app: mysqldb
service: mysqldb
spec:
ports:
- port: 3306
name: tcp
selector:
app: mysqldb
Развертывание измененного приложения Bookstore
Как и в пошаговом руководстве по OSM Bookstore, мы начнем с новой установки приложения bookstore.
Создание пространств имен
kubectl create namespace bookstore
kubectl create namespace bookbuyer
kubectl create namespace bookthief
kubectl create namespace bookwarehouse
Добавление метки пространства имен для внедрения бокового автомобиля Istio
Для OSM, используя команду osm namespace add <namespace>
, создав необходимые заметки в пространстве имен для контроллера OSM, чтобы добавить автоматическую внедрение боковой кареты. С помощью Istio необходимо просто наметить пространство имен, чтобы позволить контроллеру Istio автоматически внедрять прокси-серверы на стороне 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
Развертывание правила виртуальной службы Istio и назначения для Bookstore
Как упоминалось ранее в разделе изменений Bookstore, Istio обрабатывает перемещение трафика с помощью атрибута веса VirtualService, который мы настраиваем позже в пошаговом руководстве. Мы развертываем правило виртуальной службы и назначения для службы bookstore. Мы развертываем только книжный магазин версии 1, несмотря на развертывание книжного магазина версии 2. Виртуальная служба Istio предоставляет только маршрут для книжного магазина версии 1. Отличается от того, как OSM обрабатывает сдвиг трафика (разделение трафика), OSM развернула другую службу для приложения bookstore версии 2. OSM необходимо настроить трафик для разделения трафика между клиентскими запросами с помощью TrafficSplit. При смене трафика с помощью Istio можно ссылаться на переключение трафика на несколько развертываний приложений Kubernetes (версий), помеченных для одной службы.
В этом пошаговом руководстве развертывание обеих версий книжного магазина (версии 1 и версии 2) развертывается одновременно. Доступно только версия 1 из-за конфигурации виртуальной службы. Нет необходимости развертывать другую службу для книжного магазина версии 2, мы включаем маршрут в книжный магазин версии 2 позже при обновлении виртуальной службы книжного магазина и предоставления необходимого атрибута веса для перемещения трафика.
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
Создание модулей pod, служб и учетных записей служб
Мы используем один файл манифеста, содержащий изменения, рассмотренные ранее в пошаговом руководстве по развертыванию , bookthief
и bookstore
bookwarehouse
mysql
приложений.bookbuyer
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
Чтобы просмотреть эти ресурсы в кластере, выполните следующие команды:
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
Просмотр пользовательских интерфейсов приложений
Как и в исходном пошаговом руководстве OSM, если у вас есть клонирование репозитория OSM, вы можете использовать скрипты перенаправления портов для просмотра пользовательских интерфейсов каждого приложения здесь. Сейчас мы обеспокоены только просмотром и bookthief
пользовательским интерфейсомbookbuyer
.
cp .env.example .env
bash <<EOF
./scripts/port-forward-bookbuyer-ui.sh &
./scripts/port-forward-bookthief-ui.sh &
wait
EOF
В браузере откройте следующие URL-адреса:
http://localhost:8080 - bookbuyer
http://localhost:8083 - bookthief
Настройка политик трафика Istio
Чтобы обеспечить непрерывность работы с исходной пошаговой инструкцией OSM Bookstore для перевода в Istio, мы обсудим режим постоянной политики трафика OSM. Режим политики трафика OSM является концепцией разрешения или запрета трафика в сетке без какого-либо конкретного правила SMI- контроль доступа. Существует неизрешительная конфигурация режима трафика, позволяющая пользователям подключить приложения в сетку, получая шифрование mTLS, не требуя явных правил, позволяющих приложениям в сетке взаимодействовать. Функция разрешительного режима трафика заключалась в том, чтобы избежать нарушения связи приложения сразу после его управления OSM и предоставить время для определения правил, обеспечивая шифрование mTLS приложений. Этот параметр можно задать или true
false
с помощью MeshConfig OSM.
Istio обрабатывает применение mTLS по-другому. В отличие от OSM, режим разрешительного режима Istio автоматически настраивает прокси-серверы на стороне для использования mTLS, но позволяет службе принимать как обычный текст, так и трафик mTLS. Эквивалентной конфигурации режима осМ является использование параметров Istio PeerAuthentication
. PeerAuthentication
можно выполнить детализированно в пространстве имен или для всей сетки. Дополнительные сведения о применении MTLS Istio см. в статье о миграции Istio Mutual TLS.
Принудительное применение строгого режима Istio в пространствах имен Bookstore
Важно помнить, что так же, как и в разрешительном режиме OSM, конфигурация Istio PeerAuthentication
связана только с использованием принудительного применения MTLS. Фактические политики уровня 7, как и те, которые используются в HTTPRouteGroups OSM, обрабатываются с помощью конфигураций AuthorizationPolicy Istio, которые отображаются далее в пошаговом руководстве.
Мы тщательно помещаем bookbuyer
пространства имен , bookstore
bookthief
и bookwarehouse
пространства имен в строгом режиме MTLS 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
Как и ресурсы SMI трафика OSM и спецификации трафика SMI для определения политик управления доступом и маршрутизации для приложений, Istio выполняет эти аналогичные точные элементы управления с помощью AuthorizationPolicy
конфигураций.
Давайте рассмотрим преобразование политики TrafficTarget книжного магазина, которая, в частности, позволяет bookbuyer
взаимодействовать с ним, только с определенным путем уровня 7, заголовками и методами. Ниже приведена часть манифеста 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
Если вы заметите в политике TrafficTarget, в спецификации можно явно определить, какая исходная служба может взаимодействовать с целевой службой. Мы видим, что мы разрешаем источнику bookbuyer
быть авторизованным для обмена данными с целевым книжным магазином. Если мы преобразуем авторизацию между службами из конфигурации OSM TrafficTarget
в Istio AuthorizationPolicy
, это выглядит следующим образом:
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"]
В Istio AuthorizationPolicy
вы заметите, как целевая служба политики OSM TrafficTarget сопоставляется с меткой селектора и пространство имен, в котором находится служба. Исходная служба отображается в разделе правил, где есть атрибут source/principles, который сопоставляется с именем учетной записи службы для bookbuyer
службы.
Помимо конфигурации источника или назначения в OSM TrafficTarget, OSM привязывает использование HTTPRouteGroup для дальнейшего определения авторизации уровня 7, к источнику имеется доступ. Мы видим только часть HTTPRouteGroup ниже. Существует два 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
Существует именованное имяbooks-bought
, позволяющее источнику получить доступ к пути /books-bought
с помощью GET
метода с данными пользователя-агента заголовка узла и клиентским приложением, а buy-a-book
также совпадение, которое использует regex express для пути, .*a-book.*new
содержащего методGET
.
Эти конфигурации OSM HTTPRouteGroup можно определить в разделе правил Istio AuthorizationPolicy
, показанном ниже:
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"]
Теперь мы можем развернуть перенесенный манифест OSM traffic-access-v1.yaml, как показано ниже. AuthorizationPolicy
Нет для bookthief, поэтому пользовательский интерфейс bookthief должен остановить добавочные книги из книжного магазина версии 1:
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
Разрешение приложению Bookthief получить доступ к Bookstore
В настоящее время нет AuthorizationPolicy
, что позволяет bookthief взаимодействовать с книжным магазином. Мы можем развернуть следующее AuthorizationPolicy
, чтобы разрешить bookthief взаимодействовать с книжным магазином. Вы заметите добавление правила для политики книжного хранилища, которая позволяет авторизации 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
Пользовательский интерфейс bookthief теперь должен увеличивать книги из книжного магазина версии 1.
Настройка смены трафика между двумя версиями службы
Чтобы продемонстрировать, как сбалансировать трафик между двумя версиями службы Kubernetes, известной как перемещение трафика в Istio. Как вы помните в предыдущем разделе, реализация смены трафика OSM зависит от двух разных служб, развертываемых и добавляя эти имена служб в конфигурацию серверной TrafficTarget
части политики. Эта архитектура развертывания не требуется для того, как Istio реализует смену трафика. С помощью Istio можно создать несколько развертываний, представляющих каждую версию приложения-службы и переместив трафик на эти определенные версии с помощью конфигурации Istio virtualservice
.
В настоящее время развернуто virtualservice
только правило маршрутизации для версии 1 книжного магазина, показанное ниже:
spec:
hosts:
- bookstore
http:
- route:
- destination:
host: bookstore
subset: v1
Мы обновляем virtualservice
100% веса до версии 2 книжного магазина.
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
Теперь вы увидите как добавочную, так bookbuyer
и bookthief
пользовательский интерфейс только для bookstore
службы версии 2. Вы можете продолжать экспериментировать, изменив weigth
атрибут для перемещения трафика между двумя bookstore
версиями.
Итоги
Мы надеемся, что это пошаговое руководство по переносу текущих политик OSM в политики Istio. Получите время и просмотрите основные понятия Istio и ознакомьтесь с собственным руководством по началу работы Istio, чтобы узнать, как использовать сетку служб Istio для управления приложениями.
Azure Kubernetes Service