Не удается получить доступ к интерфейсному модулю в кластере kubernetes

#java #angularjs #docker #kubernetes #microservices

#java #angularjs #docker #kubernetes #микросервисы

Вопрос:

Я запустил несколько микросервисов в кластере k8s, таких как сервер обнаружения служб eureka (с использованием объекта service) и несколько клиентских микросервисов, которые зарегистрированы на сервере eureka. Пока все было в порядке, сервер eureka запущен и работает, и я могу получить к нему доступ, используя IP-адрес узла. Но после этого меня попросили запустить еще одну службу, и это было предоставлено моей командой интерфейса как DockerFile. Ниже приведено содержимое DockerFile

 ### STAGE 1: Build ###
FROM node:12.7-alpine AS build
WORKDIR /usr/src/app
COPY package.json ./
RUN npm install
COPY . .
RUN npm run build
 
### STAGE 2: Run ###
FROM nginx:1.17.1-alpine
COPY --from=build /usr/src/app/dist/login /usr/share/nginx/html
 

Я создал диаграмму helm с помощью (helm create UI) и соответствующим образом изменил изображение. После этого я установил приложение с помощью команды helm install и также создал объект service типа NodePort. Но проблема в том, что я не могу получить доступ к сервису или приложению.

Но, когда я запускаю приложение с помощью команды docker run, используемой командой интерфейса для его локального тестирования

 docker run --name userinterface -d -p 8585:80 userinterface
 

Я могу получить доступ к сервису из кластера k8s, используя URL http://localhost:8585 .

Что, очевидно, нам не нужно в производстве, и для этого я создал диаграмму управления и объект service соответственно.

 kubectl get pods
ui-comp-5458cd5654-wpbvw             1/1     Running   0          35m

kubectl get svc
userinterface              NodePort       10.98.75.125     <none>        80:30003/TCP                    35m 
discovery-server    NodePort       10.97.34.27      <none>        80:30005/TCP                    7d18h
 

Но при попытке доступа с помощью NodeIP я не получаю никаких o / p

curl http://<node_ip>:30003

Я попытался создать и установить эту интерфейсную службу точно так же, как работает сервер eureka.

Я не уверен, чего еще мне здесь не хватает? Пожалуйста, любое предложение.

Добавление развертывания.yaml и service.yaml для того же:

service.yaml

 controller-1:~$ kubectl get svc ui-comp -o yaml
apiVersion: v1
kind: Service
metadata:
  annotations:
    meta.helm.sh/release-name: ui-comp
    meta.helm.sh/release-namespace: default
  creationTimestamp: "2021-01-29T07:56:19Z"
  labels:
    app: ui-comp
    app.kubernetes.io/managed-by: Helm
  managedFields:
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:metadata:
        f:annotations:
          .: {}
          f:meta.helm.sh/release-name: {}
          f:meta.helm.sh/release-namespace: {}
        f:labels:
          .: {}
          f:app: {}
          f:app.kubernetes.io/managed-by: {}
      f:spec:
        f:externalTrafficPolicy: {}
        f:ports:
          .: {}
          k:{"port":80,"protocol":"TCP"}:
            .: {}
            f:nodePort: {}
            f:port: {}
            f:protocol: {}
            f:targetPort: {}
        f:selector:
          .: {}
          f:app.kubernetes.io/instance: {}
          f:app.kubernetes.io/name: {}
        f:sessionAffinity: {}
        f:type: {}
    manager: Go-http-client
    operation: Update
    time: "2021-01-29T07:56:19Z"
  name: ui-comp
  namespace: default
  resourceVersion: "31111377"
  selfLink: /api/v1/namespaces/default/services/ui-comp
  uid: 20428f83-92f3-4c84-b573-cb124d2efb39
spec:
  clusterIP: 10.98.75.125
  externalTrafficPolicy: Cluster
  ports:
  - nodePort: 30003
    port: 80
    protocol: TCP
    targetPort: 8585
  selector:
    app.kubernetes.io/instance: ui-comp
    app.kubernetes.io/name: ui-comp
  sessionAffinity: None
  type: NodePort
status:
  loadBalancer: {}
controller-1:~$
 

deployment.yaml

 controller-1:~$ kubectl get deploy ui-comp -o yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    deployment.kubernetes.io/revision: "1"
    meta.helm.sh/release-name: ui-comp
    meta.helm.sh/release-namespace: default
  creationTimestamp: "2021-01-29T07:56:19Z"
  generation: 1
  labels:
    app: ui-comp
    app.kubernetes.io/managed-by: Helm
  managedFields:
  - apiVersion: apps/v1
    fieldsType: FieldsV1
    fieldsV1:
      f:metadata:
        f:annotations:
          .: {}
          f:meta.helm.sh/release-name: {}
          f:meta.helm.sh/release-namespace: {}
        f:labels:
          .: {}
          f:app: {}
          f:app.kubernetes.io/managed-by: {}
      f:spec:
        f:progressDeadlineSeconds: {}
        f:replicas: {}
        f:revisionHistoryLimit: {}
        f:selector:
          f:matchLabels:
            .: {}
            f:app: {}
        f:strategy:
          f:rollingUpdate:
            .: {}
            f:maxSurge: {}
            f:maxUnavailable: {}
          f:type: {}
        f:template:
          f:metadata:
            f:labels:
              .: {}
              f:app: {}
          f:spec:
            f:containers:
              k:{"name":"ui-comp"}:
                .: {}
                f:image: {}
                f:imagePullPolicy: {}
                f:name: {}
                f:ports:
                  .: {}
                  k:{"containerPort":8585,"protocol":"TCP"}:
                    .: {}
                    f:containerPort: {}
                    f:name: {}
                    f:protocol: {}
                f:resources: {}
                f:securityContext: {}
                f:terminationMessagePath: {}
                f:terminationMessagePolicy: {}
            f:dnsPolicy: {}
            f:imagePullSecrets:
              .: {}
              k:{"name":"regcred"}:
                .: {}
                f:name: {}
            f:restartPolicy: {}
            f:schedulerName: {}
            f:securityContext: {}
            f:serviceAccount: {}
            f:serviceAccountName: {}
            f:terminationGracePeriodSeconds: {}
    manager: Go-http-client
    operation: Update
    time: "2021-01-29T07:56:19Z"
  - apiVersion: apps/v1
    fieldsType: FieldsV1
    fieldsV1:
      f:metadata:
        f:annotations:
          f:deployment.kubernetes.io/revision: {}
      f:status:
        f:availableReplicas: {}
        f:conditions:
          .: {}
          k:{"type":"Available"}:
            .: {}
            f:lastTransitionTime: {}
            f:lastUpdateTime: {}
            f:message: {}
            f:reason: {}
            f:status: {}
            f:type: {}
          k:{"type":"Progressing"}:
            .: {}
            f:lastTransitionTime: {}
            f:lastUpdateTime: {}
            f:message: {}
            f:reason: {}
            f:status: {}
            f:type: {}
        f:observedGeneration: {}
        f:readyReplicas: {}
        f:replicas: {}
        f:updatedReplicas: {}
    manager: kube-controller-manager
    operation: Update
    time: "2021-01-29T07:56:22Z"
  name: ui-comp
  namespace: default
  resourceVersion: "31111428"
  selfLink: /apis/apps/v1/namespaces/default/deployments/ui-comp
  uid: 2683b379-e3f3-4908-8db7-4a0617f40c0b
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: ui-comp
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: ui-comp
    spec:
      containers:
      - image: neerajkp/sotool:ui
        imagePullPolicy: Always
        name: ui-comp
        ports:
        - containerPort: 8585
          name: http
          protocol: TCP
        resources: {}
        securityContext: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      imagePullSecrets:
      - name: regcred
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      serviceAccount: ui-comp
      serviceAccountName: ui-comp
      terminationGracePeriodSeconds: 30
status:
  availableReplicas: 1
  conditions:
  - lastTransitionTime: "2021-01-29T07:56:22Z"
    lastUpdateTime: "2021-01-29T07:56:22Z"
    message: Deployment has minimum availability.
    reason: MinimumReplicasAvailable
    status: "True"
    type: Available
  - lastTransitionTime: "2021-01-29T07:56:19Z"
    lastUpdateTime: "2021-01-29T07:56:22Z"
    message: ReplicaSet "ui-comp-5458cd5654" has successfully progressed.
    reason: NewReplicaSetAvailable
    status: "True"
    type: Progressing
  observedGeneration: 1
  readyReplicas: 1
  replicas: 1
  updatedReplicas: 1
controller-1:~$
 

После исправления.

 controller-1:~/neeraj/k8s/charts$ kubectl describe svc ui-comp
Name:                     ui-comp
Namespace:                default
Labels:                   app=ui-comp
                          app.kubernetes.io/managed-by=Helm
Annotations:              meta.helm.sh/release-name: ui-comp
                          meta.helm.sh/release-namespace: default
Selector:                 app=ui-comp
Type:                     NodePort
IP:                       10.98.253.188
Port:                     <unset>  80/TCP
TargetPort:               8585/TCP
NodePort:                 <unset>  30003/TCP
Endpoints:                10.244.166.184:8585
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>
controller-1:~/neeraj/k8s/charts$ curl http://10.207.5.1:30003
curl: (7) Failed connect to 10.207.5.1:30003; Connection refused
controller-1:~/neeraj/k8s/charts$

 

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

1. Поделитесь yaml-манифестами вашего развертывания ui-comp и службы ui-comp.

2. Привет, @ShashankV обновлены манифесты развертывания и обслуживания.

3. Делитесь фактическими развернутыми манифестами, а не шаблонными. Вы можете сделать kubectl get svc ui-comp -oyaml и kubectl get deploy ui-comp -oyaml

4. обновлено с помощью развернутых манифестов.

Ответ №1:

Ваша служба не выбирает ваши серверные модули. Вы можете подтвердить это, запустив kubectl describe svc ui-comp и проверив Endpoints . Вы бы увидели, что конечных точек нет.

Ваши модули имеют метку app: ui-comp , но ваша служба пытается выбрать модули с метками app.kubernetes.io/instance: ui-comp и app.kubernetes.io/name: ui-comp

Метки выбора службы:

 selector:
    app.kubernetes.io/instance: ui-comp
    app.kubernetes.io/name: ui-comp
 

Метки модуля:

 template:
    metadata:
      creationTimestamp: null
      labels:
        app: ui-comp
 

Вам нужно исправить любой из них, чтобы они соответствовали.

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

1. Привет @shashank. Спасибо за предложение. Я исправил это в соответствии с вашим комментарием и обновил выше.. Но не удается получить доступ к службе и получить отказ в подключении.