Служба Azure Kubernetes - Http Routing Giving 502 - PullRequest
0 голосов
/ 14 сентября 2018

Мы пытаемся разместить наш API в AKS, но мы сталкиваемся с одной и той же проблемой, независимо от того, какой вариант входа мы используем.Мы запускаем последнюю версию kubernetes (1.11.2) на AKS с настроенной маршрутизацией приложений Http.Все сервисы и модули работают в соответствии с приборной панелью, а DNS Zone / healthz возвращает 200, так что это работает.

Все сервисы API построены с использованием последней версии ядра dotnet с настроенным параметром / routeчтобы вернуть код состояния 200.

Вот службы и развертывания:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: accounts-api
spec:
  replicas: 3
  minReadySeconds: 10
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1
      maxSurge: 1 
  template:
    metadata:
      labels:
        app: accounts-api
    spec:
      containers:
      - name: accounts-api
        # image: mycompany.azurecr.io/accounts.api:#{Build.BuildId}#
        image: mycompany.azurecr.io/accounts.api:latest
        imagePullPolicy: Always
        ports:
        - containerPort: 8080

---

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: programs-api
spec:
  replicas: 3
  minReadySeconds: 10
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1
      maxSurge: 1
  template:
    metadata:
      labels:
        app: programs-api
    spec:
      containers:
      - name: programs-api
        # image: mycompany.azurecr.io/programs.api:#{Build.BuildId}#
        image: mycompany.azurecr.io/programs.api:latest
        imagePullPolicy: Always
        ports:
        - containerPort: 8080

---

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: teams-api
spec:
  replicas: 3
  minReadySeconds: 10
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1
      maxSurge: 1
  template:
    metadata:
      labels:
        app: teams-api
    spec:
      containers:
      - name: teams-api
        # image: mycompany.azurecr.io/teams.api:#{Build.BuildId}#
        image: mycompany.azurecr.io/teams.api:latest
        imagePullPolicy: Always
        ports:
        - containerPort: 8080

---

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: payments-api
spec:
  replicas: 3
  minReadySeconds: 10
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1
      maxSurge: 1
  template:
    metadata:
      labels:
        app: payments-api
    spec:
      containers:
      - name: payments-api
        # image: mycompany.azurecr.io/payments.api:#{Build.BuildId}#
        image: mycompany.azurecr.io/payments.api:latest
        imagePullPolicy: Always
        ports:
        - containerPort: 8080

---

apiVersion: v1
kind: Service
metadata:
  name: accounts-api-service
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 8080
  selector:
    app: accounts-api
  type: ClusterIP

--- 

apiVersion: v1
kind: Service
metadata:
  name: programs-api-service
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 8080
  selector:
    app: programs-api
  type: ClusterIP

--- 

apiVersion: v1
kind: Service
metadata:
  name: teams-api-service
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 8080
  selector:
    app: teams-api
  type: ClusterIP

--- 

apiVersion: v1
kind: Service
metadata:
  name: payments-api-service
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 8080
  selector:
    app: payments-api
  type: ClusterIP

--- 

Во-первых, мы попытались использовать Path Based Fanout, например:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: my-api-ingress
  annotations:
    kubernetes.io/ingress.class: addon-http-application-routing
spec:
  rules:
  - host: mycompany-api.d6b1cf1ede294842b0ed.westeurope.aksapp.io
    http:
      paths:
      - path: /accounts-api
        backend:
          serviceName: accounts-api-service
          servicePort: 80
      - path: /programs-api
        backend:
          serviceName: programs-api-service
          servicePort: 80
      - path: /teams-api
        backend:
          serviceName: teams-api-service
          servicePort: 80
      - path: /workouts-api
        backend:
          serviceName: payments-api-service
          servicePort: 80

---

Но мы выбирали 502 плохих шлюза для каждого пути.Затем мы попытались объединить входы и назначить хост для каждой службы:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: my-api-ingress
  annotations:
    kubernetes.io/ingress.class: addon-http-application-routing
spec:
  rules:
  - host: accounts-api.d6b1cf1ede294842b0ed.westeurope.aksapp.io
    http:
      paths:
      - path: /
        backend:
          serviceName: accounts-api-service
          servicePort: 80
  - host: programs-api.d6b1cf1ede294842b0ed.westeurope.aksapp.io
    http:
      paths:
      - path: /
        backend:
          serviceName: programs-api-service
          servicePort: 80
  - host: teams-api.d6b1cf1ede294842b0ed.westeurope.aksapp.io
    http:
      paths:
      - path: /
        backend:
          serviceName: teams-api-service
          servicePort: 80
  - host: payments-api.d6b1cf1ede494842b0ed.westeurope.aksapp.io
    http:
      paths:
      - path: /
        backend:
          serviceName: payments-api-service
          servicePort: 80

---

Зона DNS Azure добавляет правильные записи txt и A для каждой из служб, но мы все еще достигаем 502.

Из того, что мы можем судить по поиску в Google, кажется, что проводка входа к сервисам не очень удобная, но, насколько мы видим, наш скрипт развертывания выглядит нормально.В идеале мы хотели бы использовать опцию разветвления на основе пути, в чем может быть проблема?Конфигурация базового пути?

...