Сервис Kubernetes LoadBalancer на AKS через руль недоступен - PullRequest
0 голосов
/ 26 января 2019

Я работаю над проектом, в котором мне нужно развернуть простое приложение NodeJ с использованием Kubernetes, Helm и Azure Kubernetes Service.

Вот что я пробовал:

Мой Dockerfile:

FROM node:8

WORKDIR /usr/src/app

COPY package*.json ./

RUN npm install

COPY . .

EXPOSE 32000
CMD [ "npm", "start" ]

Вот мой mychart/values.yaml:

replicaCount: 1

image:
  # registry: docker.io
  repository: registry-1.docker.io/arycloud/docker-web-app
  tag: 0.3
  pullPolicy: IfNotPresent

nameOverride: ""
fullnameOverride: ""

service:
  name: http
  type: LoadBalancer
  port: 32000
  internalPort: 32000

ingress:
  enabled: false
  annotations: {}
    # kubernetes.io/ingress.class: nginx
    # kubernetes.io/tls-acme: "true"
  paths: []
  hosts:
    - name: mychart.local
      path: /
  tls: []

resources: {}

nodeSelector: {}

tolerations: []

affinity: {}

И мой узел server.js:

'use strict';

const express = require('express');

// Constants
const PORT = 32000;
const HOST = '0.0.0.0';

// App
const app = express();
app.get('/', (req, res) => {
  res.send('Hello world from container.\n');
});

app.listen(PORT, HOST);
console.log(`Running on http://${HOST}:${PORT}`);

Обновление: Файлы шаблонов:

С templates/deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ include "mychart.fullname" . }}
  labels:
    app.kubernetes.io/name: {{ include "mychart.name" . }}
    helm.sh/chart: {{ include "mychart.chart" . }}
    app.kubernetes.io/instance: {{ .Release.Name }}
    app.kubernetes.io/managed-by: {{ .Release.Service }}
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      app.kubernetes.io/name: {{ include "mychart.name" . }}
      app.kubernetes.io/instance: {{ .Release.Name }}
  template:
    metadata:
      labels:
        app.kubernetes.io/name: {{ include "mychart.name" . }}
        app.kubernetes.io/instance: {{ .Release.Name }}
    spec:
      containers:
        - name: {{ .Chart.Name }}
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
          imagePullPolicy: {{ .Values.image.pullPolicy }}
          ports:
            - name: http
              containerPort: 32000
              protocol: TCP
          livenessProbe:
            httpGet:
              path: /
              port: 32000
          readinessProbe:
            httpGet:
              path: /
              port: 32000
            initialDelaySeconds: 3
            periodSeconds: 3
          resources:
            {{- toYaml .Values.resources | nindent 12 }}
      {{- with .Values.nodeSelector }}
      nodeSelector:
        {{- toYaml . | nindent 8 }}
      {{- end }}
    {{- with .Values.affinity }}
      affinity:
        {{- toYaml . | nindent 8 }}
    {{- end }}
    {{- with .Values.tolerations }}
      tolerations:
        {{- toYaml . | nindent 8 }}
    {{- end }}

С templates/service.yaml:

apiVersion: v1
kind: Service
metadata:
  name: {{ include "mychart.fullname" . }}
  annotations:
    service.beta.kubernetes.io/azure-load-balancer-internal: "true"
  labels:
    app.kubernetes.io/name: {{ include "mychart.name" . }}
    helm.sh/chart: {{ include "mychart.chart" . }}
    app.kubernetes.io/instance: {{ .Release.Name }}
    app.kubernetes.io/managed-by: {{ .Release.Service }}
spec:
  type: {{ .Values.service.type }}
  ports:
    - port: {{ .Values.service.port }}
      targetPort: http
      protocol: TCP
      name: http
  selector:
    app.kubernetes.io/name: {{ include "mychart.name" . }}
    app.kubernetes.io/instance: {{ .Release.Name }}

Обновление: скриншот внешнего IP: enter image description here Вотвывод `kubectl get svc node-release-mychart -oyaml:

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/azure-load-balancer-internal: "true"
  creationTimestamp: "2019-01-26T11:28:27Z"
  labels:
    app.kubernetes.io/instance: node-release
    app.kubernetes.io/managed-by: Tiller
    app.kubernetes.io/name: mychart
    helm.sh/chart: mychart-0.1.0
  name: node-release-mychart
  namespace: default
  resourceVersion: "127367"
  selfLink: /api/v1/namespaces/default/services/node-release-mychart
  uid: 8031f3b6-215d-11e9-bb89-462a1bcec690
spec:
  clusterIP: 10.0.223.27
  externalTrafficPolicy: Cluster
  ports:
  - name: http
    nodePort: 32402
    port: 32000
    protocol: TCP
    targetPort: 32000
  selector:
    app.kubernetes.io/instance: node-release
    app.kubernetes.io/name: mychart
  sessionAffinity: None
  type: LoadBalancer
status:
  loadBalancer:
    ingress:
    - ip: 10.240.0.7

Я создал кластер на AKS, затем запустил команду get-credentials из моего терминала Mac OS, и она работает нормальнозатем я пометил и передал свой образ докера в dockerhub, и контейнер докера также работает нормально, после этого я создал таблицу управления, соответственно обновил values.yaml и выполнил команду helm install, установил мое приложениедо aks иervice предоставляет external IP, на панели инструментов kubernetes pods находятся в состоянии running, но когда я пытаюсь получить доступ к своему приложению через Etxernal_IP:80, оно не загружает мое приложение.

1 Ответ

0 голосов
/ 26 января 2019

Ваша проблема связана с тем, что вы добавили аннотацию для использования внутреннего балансировщика нагрузки (поэтому не публикуются публично, доступны только внутри vnet).Чтобы исправить это, удалите эту часть из определения сервиса:

annotations:
  service.beta.kubernetes.io/azure-load-balancer-internal: "true"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...