Почему моя конфигурация политики ISTIO не применяется?

#kubernetes #istio

#kubernetes #istio

Вопрос:

Я использую Istio-1.0.6 для реализации аутентификации / авторизации. Я пытаюсь использовать веб-токены Jason (JWT). Я следовал большинству примеров из документации, но я не получаю ожидаемого результата. Вот мои настройки:

Обслуживание

 kubectl describe services hello
Name:              hello
Namespace:         agud
Selector:          app=hello
Type:              ClusterIP
IP:                10.247.173.177
Port:              <unset>  8080/TCP
TargetPort:        8080/TCP
Endpoints:         172.16.0.193:8080
Session Affinity:  None
  

Шлюз

 kubectl describe gateway
Name:         hello-gateway
Namespace:    agud
Kind:         Gateway
Metadata:
  Cluster Name:
  Creation Timestamp:  2019-03-15T13:40:43Z
  Resource Version:    1374497
  Self Link:           
/apis/networking.istio.io/v1alpha3/namespaces/agud/gateways/hello-gateway
  UID:                 ee483065-4727-11e9-a712-fa163ee249a9
Spec:
  Selector:
    Istio:  ingressgateway
  Servers:
    Hosts:
      *
    Port:
      Name:      http
      Number:    80
      Protocol:  HTTP
  

Виртуальная служба

 kubectl describe virtualservices
Name:         hello
Namespace:    agud
API Version:  networking.istio.io/v1alpha3
Kind:         VirtualService
Metadata:
  Cluster Name:
  Creation Timestamp:  2019-03-18T07:38:52Z
  Generation:          0
  Resource Version:    2329507
  Self Link:           
/apis/networking.istio.io/v1alpha3/namespaces/agud/virtualservices/hello
  UID:                 e099b560-4950-11e9-82a1-fa163ee249a9
Spec:
  Gateways:
    hello-gateway
  Hosts:
    *
  Http:
    Match:
      Uri:
        Exact:  /hello
      Uri:
        Exact:  /secured
    Route:
      Destination:
        Host:  hello.agud.svc.cluster.local
        Port:
          Number:  8080
  

Политика

 kubectl describe policies
Name:         jwt-hello
Namespace:    agud
API Version:  authentication.istio.io/v1alpha1
Kind:         Policy
Metadata:
  Cluster Name:
  Creation Timestamp:  2019-03-18T07:45:33Z
  Generation:          0
  Resource Version:    2331381
  Self Link:           
/apis/authentication.istio.io/v1alpha1/namespaces/agud/policies/jwt-hello
  UID:                 cf9ed2aa-4951-11e9-9f64-fa163e804eca
Spec:
  Origins:
    Jwt:
      Audiences:
        hello
      Issuer:         testing@secure.istio.io
      Jwks Uri:       https://raw.githubusercontent.com/istio/istio/release-1.0/security/tools/jwt/samples/jwks.json
  Principal Binding:  USE_ORIGIN
  Targets:
    Name:  hello.agud.svc.cluster.local
  

Результат

Я ожидаю получить ошибку 401, но получаю 200. Что не так с моей конфигурацией и как мне это исправить?

 curl $INGRESS_HOST/hello -s -o /dev/null -w "%{http_code}n"
200
  

Комментарии:

1. пожалуйста, упростите это, предоставив файлы yaml вместо команды describe

Ответ №1:

У вас есть:

 Port:              <unset>  8080/TCP
  

Для маршрутизации Istio и безопасности необходимо задать для имени порта значение http или http-<something> .

Я пробовал с Istio 1.1. Я получил 503 вместо 401 .

Комментарии:

1. Привет @esnible, я добавил порт 8080, но это не помогло.

2. У вашей службы Kubernetes «hello» будет порт. В Kubernetes порты имеют поле name, но это всего лишь метка. Название имеет смысл для Istio. Попробуйте kubectl edit свою службу hello и укажите имя порта http .

3. К сожалению, это тоже не помогло. kubectl описывает приветственное имя службы: hello Пространство имен: agud Метки: <нет> Аннотации: <нет> Селектор: app = hello Тип: ClusterIP IP: 10.247.174.223 Порт: http 8080 / TCP targetPort: 8080 / TCP Конечные точки: 172.16.0.163: 8080 Привязка к сеансу: Нет События: <нет>