【问题标题】:Not able to access frontend pod in a kubernetes cluster无法访问 Kubernetes 集群中的前端 pod
【发布时间】:2021-05-03 04:20:55
【问题描述】:

我在 k8s 集群中启动了一些微服务,例如 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 create UI) 创建了一个 helm 图表并相应地更改了图像。之后,我使用 helm install 命令安装了应用程序,并且还创建了一个 NodePort 类型的服务对象。但问题是我无法访问服务或应用程序。

但是,当我使用前端团队用来在本地测试它的 docker run 命令启动应用程序时

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

我可以使用 URL http://localhost:8585 从 k8s 集群访问服务。

这显然是我们在生产中不想要的,为此我相应地创建了一个舵图和服务对象。

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

卷曲 http://:30003

我尝试以与 eureka 服务器运行方式完全相同的方式创建和安装此前端服务。

我不确定,我还缺少什么? 请有任何建议。

同时添加 deployment.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$

【问题讨论】:

  • 共享您的 ui-comp 部署和 ui-comp 服务的 yaml 清单。
  • 嗨 @ShashankV 更新了部署和服务清单。
  • 共享实际部署的清单,而不是模板化的清单。你可以做kubectl get svc ui-comp -oyamlkubectl get deploy ui-comp -oyaml
  • 使用已部署的清单进行了更新。

标签: java angularjs docker kubernetes microservices


【解决方案1】:

您的服务没有选择您的后端 pod。您可以通过运行kubectl describe svc ui-comp 并检查Endpoints 来确认这一点。您会看到没有端点。

您的 pod 具有标签 app: ui-comp,但您的服务正在尝试选择标签为 app.kubernetes.io/instance: ui-compapp.kubernetes.io/name: ui-comp 的 pod

服务选择器标签:

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

Pod 标签:

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

您需要更正其中任何一个以使它们匹配。

【讨论】:

  • 嗨@shashank。谢谢你的建议。我现在根据您的评论进行了更正并在上面进行了更新。但无法访问该服务并且连接被拒绝。
猜你喜欢
  • 2020-09-10
  • 2022-01-15
  • 2021-08-08
  • 1970-01-01
  • 2023-03-09
  • 2022-01-26
  • 2019-02-24
  • 2023-04-03
  • 1970-01-01
相关资源
最近更新 更多