Istio — это платформа сервисной сетки с открытым исходным кодом, которая обеспечивает расширенные сетевые возможности, возможность наблюдения и безопасность для приложений на основе микросервисов, развернутых в Kubernetes. Одной из фундаментальных концепций Istio является «метка приложения», которая играет решающую роль в управлении и контроле трафика внутри сервисной сети. В этой статье блога мы рассмотрим различные методы использования метки приложения в Istio, а также приведем примеры кода для демонстрации их реализации. Итак, приступим!
Метод 1: маршрутизация на основе метки приложения
Метку приложения можно использовать для маршрутизации трафика к определенным микросервисам на основе их идентификаторов приложения. Для этого вы можете определить VirtualService в Istio с соответствующим DestinationRule и сопоставить входящие запросы на основе метки приложения.
Пример:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: myapp-vs
spec:
hosts:
- myapp.example.com
http:
- route:
- destination:
host: myapp-service
subset: v1
weight: 80
- destination:
host: myapp-service
subset: v2
weight: 20
match:
- headers:
app-label: myapp
В этом примере VirtualService направляет 80 % трафика в подмножество v1из myapp-serviceи 20 % в подмножество v2., поскольку в заголовках запросов для метки приложения установлено значение “myapp”.
Метод 2. Правило назначения для подмножества приложений на основе ярлыков
Метки приложений можно использовать для создания подмножеств внутри службы, что позволяет выполнять канареечные развертывания, A/B-тестирование или постепенное развертывание. Определив DestinationRules, вы можете настроить Istio для маршрутизации трафика к определенным подмножествам на основе метки приложения.
Пример:
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: myapp-dr
spec:
host: myapp-service
subsets:
- name: v1
labels:
version: v1
app-label: myapp
- name: v2
labels:
version: v2
app-label: myapp
В этом примере DestinationRule определяет два подмножества (v1и v2) для myapp-serviceна основе метки приложения. Запросы с меткой приложения “myapp” будут перенаправляться в соответствующие подмножества, что позволяет контролировать распределение трафика.
Метод 3: наблюдаемость и метрики с помощью ярлыка приложения
Метки приложений можно использовать в сочетании с функциями наблюдения Istio, чтобы получить представление о поведении и производительности конкретных микросервисов. Используя ярлык приложения, вы можете фильтровать и объединять показатели, журналы и трассировки для расширенного мониторинга и устранения неполадок.
Пример:
Запрос Прометея: sum(rate(http_request_total{app-label="myapp"}[1m]))
В этом примере запрос Prometheus фильтрует метрику http_request_totalна основе метки приложения «myapp», предоставляя количество HTTP-запросов в минуту для конкретного микросервиса.
Метод 4. Политики безопасности с меткой приложения
Метки приложений также можно использовать для реализации политик безопасности в сети служб. Применяя политики авторизации Istio на основе метки приложения, вы можете контролировать доступ к определенным микросервисам, обеспечивая безопасность связи и предотвращая несанкционированные запросы.
Пример:
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
name: myapp-authz
spec:
selector:
matchLabels:
app-label: myapp
action: ALLOW
rules:
- from:
- source:
notRequestPrincipals: ["*"]
В этом примере AuthorizationPolicy разрешает доступ к микросервисам с меткой приложения «myapp» только из проверенных источников, запрещая запросы от неаутентифицированных клиентов.
Метка приложения в Istio служит мощным инструментом для управления трафиком, реализации детальной маршрутизации, обеспечения наблюдаемости и соблюдения политик безопасности в сети сервисов. Понимая и используя различные методы, обсуждаемые в этой статье, вы сможете эффективно использовать метку приложения для повышения масштабируемости, надежности и безопасности ваших приложений на основе микросервисов, развернутых в Istio.
Помните, что гибкость Istio позволяет использовать различные подходы и конфигурации, и вы можете адаптировать эти примеры в соответствии с вашими конкретными требованиями и архитектурой приложения.