#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. Спасибо за предложение. Я исправил это в соответствии с вашим комментарием и обновил выше.. Но не удается получить доступ к службе и получить отказ в подключении.