Разделение трафика Istio с неправильным использованием веса
Я использую приложение bookinfo по умолчанию https://istio.io/docs/examples/bookinfo/ и пытаюсь протестировать разделенный трафик с помощью службы отзывов. Киали показывает разделение, и кажется, что все настроено правильно, но все еще выполняется циклический поиск. Если я удалю все виртуальные службы и правила назначения, приложение будет работать как обычно.
# Source: bookinfo/templates/destination-rule-all.yaml
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: productpage
spec:
host: productpage
subsets:
- name: v1
labels:
version: v1
---
# Source: bookinfo/templates/destination-rule-all.yaml
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: ratings
spec:
host: ratings
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2
- name: v2-mysql
labels:
version: v2-mysql
- name: v2-mysql-vm
labels:
version: v2-mysql-vm
---
# Source: bookinfo/templates/destination-rule-all.yaml
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: details
spec:
host: details
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2
---
# Source: bookinfo/templates/destination-rule-all.yaml
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: reviews
spec:
host: reviews
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2
- name: v3
labels:
version: v3
---
# Source: bookinfo/templates/bookinfo-gateway.yaml
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: bookinfo-gateway
chart: bookinfo-0.1.2
release: bookinfo
spec:
selector:
istio: ingressgateway # use istio default controller
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*"
---
# Source: bookinfo/templates/bookinfo-gateway.yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: bookinfo
chart: bookinfo-0.1.2
release: bookinfo
spec:
hosts:
- "*"
gateways:
- bookinfo-gateway
http:
- match:
- uri:
exact: /productpage
- uri:
prefix: /static
- uri:
exact: /login
- uri:
exact: /logout
- uri:
prefix: /api/v1/products
route:
- destination:
host: productpage
port:
number: 9080
---
# Source: bookinfo/templates/virtual-service-all-v1.yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: productpage
spec:
hosts:
- productpage
gateways:
- bookinfo-gateway
http:
- route:
- destination:
host: productpage
subset: v1
---
# Source: bookinfo/templates/virtual-service-all-v1.yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
gateways:
- bookinfo-gateway
http:
- route:
- destination:
host: reviews
subset: v1
weight: 100
- destination:
host: reviews
subset: v2
weight: 0
- destination:
host: reviews
subset: v3
weight: 0
---
# Source: bookinfo/templates/virtual-service-all-v1.yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: ratings
spec:
hosts:
- ratings
gateways:
- bookinfo-gateway
http:
- route:
- destination:
host: ratings
subset: v1
---
# Source: bookinfo/templates/virtual-service-all-v1.yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: details
spec:
hosts:
- details
gateways:
- bookinfo-gateway
http:
- route:
- destination:
host: details
subset: v1
# Source: bookinfo/templates/reviews-v1-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: reviews-v1
labels:
chart: bookinfo-0.1.2
release: bookinfo
app: reviews
version: v1
spec:
replicas: 1
selector:
matchLabels:
app: reviews
release: bookinfo
version: v1
template:
metadata:
labels:
app: reviews
release: bookinfo
version: v1
spec:
serviceAccountName: bookinfo-reviews
containers:
- name: reviews
image: myhub/istio/examples-bookinfo-reviews-v1:1.15.0
imagePullPolicy: IfNotPresent
env:
- name: LOG_DIR
value: "/tmp/logs"
ports:
- containerPort: 9080
volumeMounts:
- name: tmp
mountPath: /tmp
- name: wlp-output
mountPath: /opt/ibm/wlp/output
volumes:
- name: wlp-output
emptyDir: {}
- name: tmp
emptyDir: {}
---
# Source: bookinfo/templates/reviews-v2-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: reviews-v2
labels:
chart: bookinfo-0.1.2
release: bookinfo
app: reviews
version: v2
spec:
replicas: 1
selector:
matchLabels:
app: reviews
release: bookinfo
version: v2
template:
metadata:
labels:
app: reviews
release: bookinfo
version: v2
spec:
serviceAccountName: bookinfo-reviews
containers:
- name: reviews
image: myhub/istio/examples-bookinfo-reviews-v2:1.15.0
imagePullPolicy: IfNotPresent
env:
- name: LOG_DIR
value: "/tmp/logs"
ports:
- containerPort: 9080
volumeMounts:
- name: tmp
mountPath: /tmp
- name: wlp-output
mountPath: /opt/ibm/wlp/output
volumes:
- name: wlp-output
emptyDir: {}
- name: tmp
emptyDir: {}
---
# Source: bookinfo/templates/reviews-v3-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
metadata:
name: reviews-v3
labels:
chart: bookinfo-0.1.2
release: bookinfo
app: reviews
version: v3
spec:
replicas: 1
selector:
matchLabels:
app: reviews
release: bookinfo
version: v3
template:
metadata:
labels:
app: reviews
release: bookinfo
version: v3
spec:
serviceAccountName: bookinfo-reviews
containers:
- name: ratings
image: myhub/istio/examples-bookinfo-reviews-v3:1.15.0
imagePullPolicy: IfNotPresent
env:
- name: LOG_DIR
value: "/tmp/logs"
ports:
- containerPort: 9080
volumeMounts:
- name: tmp
mountPath: /tmp
- name: wlp-output
mountPath: /opt/ibm/wlp/output
volumes:
- name: wlp-output
emptyDir: {}
- name: tmp
emptyDir: {}
---
Окружающая среда
вид v0.7.0 go1.13.6 linux / amd64
K8s v1.18.1 v1.17.0
1 ответ
Я попытался воспроизвести вашу проблему на gke с помощью istio 1.5.2, и все работает нормально.
Я следил за документацией istio bookinfo
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
Как упоминалось здесь
Применить правила назначения по умолчанию
Прежде чем вы сможете использовать Istio для управления маршрутизацией версий Bookinfo, вам необходимо определить доступные версии, называемые подмножествами, в правилах назначения.
Выполните следующую команду, чтобы создать правила назначения по умолчанию для служб Bookinfo:
Если вы не включили взаимный TLS, выполните эту команду:
Выберите этот вариант, если вы новичок в Istio и используете демонстрационный профиль конфигурации.
$ kubectl apply -f samples/bookinfo/networking/destination-rule-all.yaml
Если вы включили взаимный TLS, выполните эту команду:
$ kubectl apply -f samples/bookinfo/networking/destination-rule-all-mtls.yaml
Подождите несколько секунд, пока правила назначения не распространятся.
Вы можете отобразить правила назначения с помощью следующей команды:
$ kubectl get destinationrules -o yaml
Примените свой виртуальный сервис для обзоров
Примеры
Трафик только для подмножества v1.
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- route:
- destination:
host: reviews
subset: v1
Трафик только для подмножества v2.
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- route:
- destination:
host: reviews
subset: v2
50/50 вес трафика для подмножеств v2 и v3.
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- route:
- destination:
host: reviews
subset: v2
weight: 50
- destination:
host: reviews
subset: v3
weight: 50
100/0/0 вес трафика для подмножества v1,v2 и v3.
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- route:
- destination:
host: reviews
subset: v2
weight: 100
- destination:
host: reviews
subset: v3
weight: 0
- destination:
host: reviews
subset: v1
weight: 0
С виртуальным сервисом только для подмножества v1 Киали показывает, что трафик идет только на v1
На странице продукта Istio звезды не отображаются, поэтому это обзор v1.
Есть документация по маршрутизации на основе веса для обзоров.