Istio Gateway с несколькими портами | служба отвечает только на порт 80 - PullRequest
0 голосов
/ 08 ноября 2018

Привет, поэтому я настроил шлюз для портов 80 и 8083 для одного домена i-e example.com. Теперь, когда я создаю атрибуты, используя приведенный ниже файл конфигурации, все запускается.

проблема в том, что я использую 8083 в сервисе и virtualService, но я получаю ответ от сервиса на 80, где 8083 получает тайм-аут соединения.

Невозможно понять, почему служба отвечает на 80, а не на 8083. Я хочу оставить оба порта в шлюзе, но при определении в сервисном и входном порте 8083 он должен реагировать конкретно на 8083.

Буду признателен за ваш отзыв в этом.

apiVersion: v1
data:
  my.databag.1: need_triage
kind: ConfigMap
metadata:
  name: my-service-env-variables
  namespace: api

---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    app: my-service
  name: my-service-service-deployment
  namespace: api
spec:
  replicas: 1
  template:
    metadata:
      annotations:
        traffic.sidecar.istio.io/excludeOutboundIPRanges: 0.0.0.0/0
      labels:
        app: my-service-service-deployment
    spec:
      containers:
      - env:
        - name: my.variable
          valueFrom:
            secretKeyRef:
              key: my_token
              name: my.variable
        envFrom:
        - configMapRef:
            name: my-service-env-variables
        image: imaagepath:tag
        name: my-service-pod
        ports:
        - containerPort: 8080
          name: mysvcport
        resources:
          limits:
            cpu: 700m
            memory: 1.8Gi
          requests:
            cpu: 500m
            memory: 1.7Gi

---
apiVersion: v1
kind: Service
metadata:
  name: my-service
  namespace: api
spec:
  ports:
  - port: 8083
    protocol: TCP
    targetPort: mysvcport
  selector:
    app: my-service-service-deployment

---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: my-service-ingress
  namespace: api
spec:
  gateways:
  - http-gateway
  hosts:
  - my-service.example.com
  http:
  - route:
    - destination:
        host: my-service
        port:
          number: 8083
---
apiVersion: v1
items:
- apiVersion: networking.istio.io/v1alpha3
  kind: Gateway
  metadata:
    clusterName: ""
    creationTimestamp: 2018-11-07T13:17:00Z
    name: http-gateway
    namespace: api
    resourceVersion: "11778445"
    selfLink: /apis/networking.istio.io/v1alpha3/namespaces/api/gateways/http-gateway
    uid: 694f66a4-e28f-11e8-bc21-0ac9e31187a0
  spec:
    selector:
      istio: ingressgateway
    servers:
    - hosts:
      - '*.example.com'
      port:
        name: http
        number: 80
        protocol: HTTP
    - hosts:
      - '*.example.com'
      port:
        name: tomcat-http
        number: 8083
        protocol: HTTP
kind: List
metadata:
  resourceVersion: ""
  selfLink: ""

1 Ответ

0 голосов
/ 08 ноября 2018

Две проблемы с вашей конфигурацией:

  1. Вы должны назвать свой порт http-tomcat, а не tomcat-http, см. Требования Istio для именованных портов
  2. Чтобы включить вход на порт 8083, необходимо повторно развернуть службу istio-ingressgateway, добавив порт 8083: helm template install/kubernetes/helm/istio/ --name istio-ingressgateway \ --namespace istio-system -x charts/gateways/templates/service.yaml \ --set gateways.istio-egressgateway.enabled=false \ --set gateways.istio-ingressgateway.ports[0].port=80 \ --set gateways.istio-ingressgateway.ports[0].name=http \ --set gateways.istio-ingressgateway.ports[1].port=443 \ --set gateways.istio-ingressgateway.ports[1].name=https \ --set gateways.istio-ingressgateway.ports[2].port=8083 \ --set gateways.istio-ingressgateway.ports[2].name=http-tomcat \ | kubectl apply -f -

Сказав это, вам действительно нужно разрешить входной доступ к порту 8083? Вы можете определить некоторый путь в VirtualService для порта 80, например, / tomcat / * и перенаправить входящий трафик с порта 80 на ваш сервис через порт 8083.

...