Como desabilitar mtls no Instio?

Nov 19 2020

Tenho um problema ao conectar dois serviços no Kubernetes com o Istio. Meu serviço faz solicitações POST para o elasticsearch.

2020-11-18T21:51:53.758079131Z org.elasticsearch.client.ResponseException: method [POST], host [http://elasticsearch:9200], URI [/_bulk?timeout=1m], status line [HTTP/1.1 503 Service Unavailable]
2020-11-18T21:51:53.758087238Z upstream connect error or disconnect/reset before headers. reset reason: connection failure

Eu li algumas perguntas / problemas do GitHub sobre isso e um dos possíveis motivos pode ser mtls, então como posso desativá-lo?

Eu estava tentando com isso:

apiVersion: "security.istio.io/v1beta1"
kind: "PeerAuthentication"
metadata:
  name: "default"
  namespace: "istio-system"
spec:
  mtls:
    mode: DISABLE

Mas com isso PeerAuthentication, não consigo chegar nem mesmo ao meu serviço. Você tem algum conselho?

Respostas

1 Jakub Nov 23 2020 at 15:41

Desativar mtls

Este PeerAuthentication é a maneira correta de desabilitar mtls.

apiVersion: "security.istio.io/v1beta1"
kind: "PeerAuthentication"
metadata:
  name: "default"
  namespace: "istio-system"
spec:
  mtls:
    mode: DISABLE

Existe documentação istio sobre isso.


Elasticsearch problem

De acordo com a documentação da istio:

Existem dois parâmetros de configuração do Elasticsearch que precisam ser definidos adequadamente para executar o Elasticsearch com o Istio: network.bind_host e network.publish_host . Por padrão, esses parâmetros são definidos para o parâmetro network.host. Se network.host estiver definido como 0.0.0.0, o Elasticsearch provavelmente pegará o IP do pod como o endereço de publicação e nenhuma configuração adicional será necessária.

Se a configuração padrão não funcionar, você pode definir network.bind_host como 0.0.0.0 ou localhost (127.0.0.1) e network.publish_host como o IP do pod. Por exemplo:

...
containers:
- name: elasticsearch
  image: docker.elastic.co/elasticsearch/elasticsearch:7.2.0
  env:
    - name: network.bind_host
      value: 127.0.0.1
    - name: network.publish_host
      valueFrom:
        fieldRef:
          fieldPath: status.podIP
   ...

Consulte Configurações de rede para Elasticsearch para obter mais informações.

Se isso não funcionar, há dois problemas com o github:

  • https://github.com/istio/istio/issues/14662#issuecomment-723669123
  • https://github.com/elastic/cloud-on-k8s/issues/2770

que sugerem usar

annotations:
  traffic.sidecar.istio.io/excludeOutboundPorts: "" 
  traffic.sidecar.istio.io/excludeInboundPorts: ""

Há documentação do elasticsearch sobre isso.