BASH
curl -L https://istio.io/downloadIstio | sh -
cd istio-<version>
export PATH=$PWD/bin:$PATH
istioctl) предоставляет инструменты для установки и управления Istio в вашем кластере Kubernetes. Без него невозможно развернуть и настраивать Istio.BASH
minikube start
BASH
istioctl install --set profile=demo -y
istio-system, где находятся компоненты Istio. Все поды должны быть в состоянии Running или Completed.BASH
kubectl get pods -n istio-system
BASH
kubectl label namespace default istio-injection=enabled
quickdelivery-deployment.yaml с конфигурацией деплоя:YAML
apiVersion: apps/v1
kind: Deployment
metadata:
name: quickdelivery-service
labels:
app: quickdelivery
spec:
replicas: 3
selector:
matchLabels:
app: quickdelivery
template:
metadata:
labels:
app: quickdelivery
spec:
containers:
- name: quickdelivery
image: quickdelivery:latest
ports:
- containerPort: 80
BASH
kubectl apply -f quickdelivery-deployment.yaml
quickdelivery-traffic.yaml:YAML
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: quickdelivery
spec:
hosts:
- quickdelivery
http:
- route:
- destination:
host: quickdelivery
subset: v1
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: quickdelivery
spec:
host: quickdelivery
subsets:
- name: v1
labels:
version: v1
BASH
kubectl apply -f quickdelivery-traffic.yaml
BASH
kubectl get pods -n istio-system
BASH
kubectl -n istio-system port-forward $(kubectl -n istio-system get pod -l app=grafana -o jsonpath='{.items[0].metadata.name}') 3000:3000
BASH
kubectl get pods -n istio-system
BASH
kubectl -n istio-system port-forward $(kubectl -n istio-system get pod -l app=jaeger -o jsonpath='{.items[0].metadata.name}') 16686:16686
OrderService и PaymentService. OrderService отвечает за обработку заказов, а PaymentService — за обработку платежей. OrderService должен взаимодействовать с PaymentService для завершения заказа.OrderService должен знать точный адрес PaymentService. Это приводит к жёсткой зависимости и проблемам при масштабировании или изменении конфигурации сервисов.OrderService может автоматически обнаруживать PaymentService без необходимости жёстко заданных конфигураций.OrderService и DeliveryService. OrderService отвечает за обработку заказов, а DeliveryService — за управление доставкой. OrderService должен взаимодействовать с DeliveryService для завершения заказа.BASH
kubectl get svc -n kube-system kube-dns или coredns.OrderService и DeliveryService в кластере Kubernetes.YAML
# orderservice-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: orderservice
labels:
app: orderservice
spec:
replicas: 2
selector:
matchLabels:
app: orderservice
template:
metadata:
labels:
app: orderservice
spec:
containers:
- name: orderservice
image: quickdelivery/orderservice:latest
ports:
- containerPort: 8080
---
# deliveryservice-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: deliveryservice
labels:
app: deliveryservice
spec:
replicas: 2
selector:
matchLabels:
app: deliveryservice
template:
metadata:
labels:
app: deliveryservice
spec:
containers:
- name: deliveryservice
image: quickdelivery/deliveryservice:latest
ports:
- containerPort: 8080
BASH
kubectl apply -f orderservice-deployment.yaml
kubectl apply -f deliveryservice-deployment.yaml
OrderService и DeliveryService в кластере Kubernetes.YAML
# orderservice-service.yaml
apiVersion: v1
kind: Service
metadata:
name: orderservice
spec:
selector:
app: orderservice
ports:
- protocol: TCP
port: 80
targetPort: 8080
---
# deliveryservice-service.yaml
apiVersion: v1
kind: Service
metadata:
name: deliveryservice
spec:
selector:
app: deliveryservice
ports:
- protocol: TCP
port: 80
targetPort: 8080
BASH
kubectl apply -f orderservice-service.yaml
kubectl apply -f deliveryservice-service.yaml
OrderService и DeliveryService, что позволяет микросервисам находить друг друга по DNS-именам вроде orderservice.default.svc.cluster.local.OrderService может обратиться к DeliveryService по его DNS-имени deliveryservice.default.svc.cluster.local.PYTHON
import requests
delivery_service_url = "http://deliveryservice.default.svc.cluster.local"
response = requests.get(f"{delivery_service_url}/deliver", params={"order_id": 123})
if response.status_code == 200:
print("Delivery scheduled successfully")
else:
print("Failed to schedule delivery") YAML
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: order-to-delivery
spec:
hosts:
- deliveryservice
http:
- route:
- destination:
host: deliveryservice
subset: v1
BASH
kubectl apply -f order-to-delivery-virtualservice.yaml
DeliveryService. Это позволяет контролировать, как трафик направляется между микросервисами.BookingService для обработки бронирований, PaymentService для управления платежами и NotificationService для отправки уведомлений. Эти микросервисы должны взаимодействовать друг с другом, чтобы обеспечивать бесперебойную работу системы.YAML
apiVersion: apps/v1
kind: Deployment
metadata:
name: delivery-service-v2
labels:
app: delivery
version: v2
spec:
replicas: 3
selector:
matchLabels:
app: delivery
version: v2
template:
metadata:
labels:
app: delivery
version: v2
spec:
containers:
- name: delivery
image: quickdelivery/delivery-service:v2
ports:
- containerPort: 80 BASH
kubectl apply -f delivery-service-v2-deployment.yaml YAML
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: delivery-service
spec:
hosts:
- delivery-service
http:
- route:
- destination:
host: delivery-service
subset: v1
weight: 90
- destination:
host: delivery-service
subset: v2
weight: 10 BASH
kubectl apply -f delivery-service-virtualservice.yaml YAML
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: delivery-service
spec:
hosts:
- delivery-service
http:
- route:
- destination:
host: delivery-service
subset: v2
weight: 100 BASH
kubectl apply -f delivery-service-virtualservice.yaml