Istio: Как изменить h2UpgradePolicy глобально? - PullRequest
1 голос
/ 21 июня 2020

Я хочу обновить все входящие соединения http 1.1 до http2 в Istio. Я понимаю, как достичь этого с помощью правил назначения для определенного пространства имен и модуля.

Однако я хочу обновить все соединения, обслуживаемые мной sh, с http1.1 тоже http2. Даже документация рекомендует это, если Sidecar Istio вводится автоматически здесь .

, если sidecar установлен на всех pod'ах в me sh, тогда это должно быть установлено на UPGRADE .

Могу ли я обновить ConfigMap "istio" в пространстве имен "Istio-system"?

Если да, то как будет выглядеть запись?

Если нет , предложите, пожалуйста, Как мне достичь этого с минимальными усилиями?

1 Ответ

3 голосов
/ 22 июня 2020

В самом деле, вы установите его в configMap istio, и это будет выглядеть так:

apiVersion: v1
data:
  mesh: |-
    accessLogEncoding: TEXT
    accessLogFile: /dev/stdout
    accessLogFormat: ""
    h2UpgradePolicy: UPGRADE        #<- here
    defaultConfig:
      concurrency: 2
      configPath: ./etc/istio/proxy

Теперь немного сложно увидеть, что это работает. Я отправил четыре запроса; два из них без параметра h2UpgradePolicy, а два из них с h2UpgradePolicy: UPGRADE. Но все четыре моих запроса от клиента выглядели так:

$ kubectl exec -it curler -- curl -I demo.istio
Defaulting container name to curler.
Use 'kubectl describe pod/curler -n default' to see all of the containers in this pod.
HTTP/1.1 200 OK
server: envoy
date: Mon, 22 Jun 2020 13:05:53 GMT
content-type: text/html
content-length: 612
last-modified: Tue, 26 May 2020 15:00:20 GMT
etag: "5ecd2f04-264"
accept-ranges: bytes
x-envoy-upstream-service-time: 1

Я отправил запросы извне sh, так как изнутри я получал HTTP2 по умолчанию. Итак, в моем случае mTLS был отключен, но это не имеет значения.

Чтобы убедиться, что он работает, вы должны проверить журналы нижестоящего прокси:

...
[2020-06-22T13:03:03.942Z] "HEAD / HTTP/1.1" 200 - "-" "-" 0 0 0 0 "-" "curl/7.59.0" "a7c32d21-dcea-95da-b7c1-67c5783a1641" "demo.istio" "127.0.0.1:80" inbound|80|http|demo.istio.svc.cluster.local 127.0.0.1:33180 192.168.72.186:80 192.168.66.168:34814 outbound_.80_._.demo.istio.svc.cluster.local default
[2020-06-22T13:03:05.245Z] "HEAD / HTTP/1.1" 200 - "-" "-" 0 0 0 0 "-" "curl/7.59.0" "409b3432-365f-94fe-87cd-8a85b586b42d" "demo.istio" "127.0.0.1:80" inbound|80|http|demo.istio.svc.cluster.local 127.0.0.1:60952 192.168.72.186:80 192.168.66.168:34830 outbound_.80_._.demo.istio.svc.cluster.local default
[2020-06-22T13:03:36.732Z] "HEAD / HTTP/2" 200 - "-" "-" 0 0 0 0 "-" "curl/7.59.0" "45dd94e5-6f29-9114-b09f-bda065dfd1eb" "demo.istio" "127.0.0.1:80" inbound|80|http|demo.istio.svc.cluster.local 127.0.0.1:33180 192.168.72.186:80 192.168.66.168:35120 outbound_.80_._.demo.istio.svc.cluster.local default
[2020-06-22T13:03:38.743Z] "HEAD / HTTP/2" 200 - "-" "-" 0 0 0 0 "-" "curl/7.59.0" "79e72286-f247-9ed0-b510-2819a886c7f9" "demo.istio" "127.0.0.1:80" inbound|80|http|demo.istio.svc.cluster.local 127.0.0.1:33180 192.168.72.186:80 192.168.66.168:35120 outbound_.80_._.demo.istio.svc.cluster.local default

ОЧЕНЬ ВАЖНО: Для того, чтобы он работал, служба перед нисходящим одноранговым узлом должна иметь именованный порт, и он должен вызываться http

apiVersion: v1
kind: Service
metadata:
  name: demo
spec:
  ports:
  - name: http      #<- this parameter is mandatory to upgrade to HTTP2
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
...