当前位置: 首页 > 知识库问答 >
问题:

无法使用节点端口方法在群集中外部访问从群集中部署的kubernetes服务

华和悦
2023-03-14

我正在尝试访问库伯内特斯集群部署的Spring Boot微服务并尝试测试REST API。我在部署脚本中配置了节点端口方法。但是当我尝试使用Postman工具访问时,我只得到“无法获得任何响应”的响应。

我配置了服务。yaml脚本类似于以下结构,

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  type: NodePort
  ports:
    - port: 7100
      targetPort: 7100
      protocol: TCP
      name: http
      nodePort: 31007
 selector:
      app: my-deployment

我的部署。yaml如下所示:,

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
  labels:
    app: my-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-deployment
  template:
    metadata:
      labels:
        app: my-deployment
      annotations: 
        date: "+%H:%M:%S %d/%m/%y"
    spec:
      imagePullSecrets:
        - name: "regcred"
      containers:
       - name: my-deployment-container
         image: spacestudymilletech010/spacestudysecurityauthcontrol:latest
         imagePullPolicy: Always
         ports:
            - name: http
              containerPort: 8065
              protocol: TCP
      tolerations:
      - key: "dedicated-app"
        operator: "Equal"
        value: "my-dedi-app-a"
        effect: "NoSchedule"

当我使用kubectl描述服务时,输出如下所示,

我正在尝试通过以下方式访问我部署的API,

  http://<my-cluster-Worker-NodeIP-Address:31007/<my-deployed-ReST-API-end-point>

更新

当我为我的部署运行kubectl descripe pod命令时,我得到如下响应:,

docker@MILDEVKUB010:~$ kubectl describe pod spacestudycontrolalerts- 
deployment-8644449c58-x4zd6
Name:           spacestudycontrolalerts-deployment-8644449c58-x4zd6
Namespace:      default
Priority:       0
Node:           <none>
Labels:         app=spacestudycontrolalerts-deployment
            pod-template-hash=8644449c58
Annotations:    date: +%H:%M:%S %d/%m/%y
Status:         Pending
IP:
IPs:            <none>
Controlled By:  ReplicaSet/spacestudycontrolalerts-deployment-8644449c58
Containers:
  spacestudycontrolalerts-deployment-container:
    Image:        spacestudymilletech010/spacestudycontrolalerts:latest
    Port:         7102/TCP
    Host Port:    0/TCP
    Environment:  <none>
    Mounts:
  /var/run/secrets/kubernetes.io/serviceaccount from default-token-6s55b (ro)
Conditions:
  Type           Status
  PodScheduled   False
Volumes:
  default-token-6s55b:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-6s55b
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
             node.kubernetes.io/unreachable:NoExecute for 300s
Events:
  Type     Reason            Age        From               Message
  ----     ------            ----       ----               -------
  Warning  FailedScheduling  <unknown>  default-scheduler  0/2 nodes are available: 2 node(s) had taints that the pod didn't tolerate.

我从描述pod命令中得到事件消息,比如0/2个节点可用:2个节点有pod不能容忍的污染 如上所示。

当我运行kubectl获取节点命令时,我得到如下所示,

NAME           STATUS   ROLES    AGE   VERSION
mildevkub020   Ready    master   5d    v1.17.0
mildevkub040   Ready    master   5d    v1.17.0

服务访问哪里出错了?


共有3个答案

邴墨竹
2023-03-14

首先,由于部署时定义的容忍度,POD未能调度。yaml与可用节点上应用的污染不匹配。

Events:
  Type     Reason            Age        From               Message
  ----     ------            ----       ----               -------
  Warning  FailedScheduling  <unknown>  default-scheduler  0/2 nodes are available: 2 node(s) had taints that the pod didn't tolerate.

其次,从问题陈述中的日志中,选择符定义在服务上。yaml与所述POD上的标签不匹配,并且对于映射到该服务的endpoint将是一个问题。

选择器字段处于服务状态。亚马尔

selector:
      app: my-deployment

描述命令中的pods标签

docker@MILDEVKUB010:~$ kubectl describe pod spacestudycontrolalerts- 
deployment-8644449c58-x4zd6


Labels:         app=spacestudycontrolalerts-deployment
            pod-template-hash=8644449c58
汤承德
2023-03-14

快照不显示endpoint。这意味着服务或选择器后面没有运行吊舱

selector:
      app: my-deployment

...在任何跑步舱中都不符合这样的标签。

海信鸥
2023-03-14
匿名用户

如果存在事件消息,即0/2个节点可用:2个节点存在pod无法容忍的污染。这意味着你的节点受到了污染。

步骤1:-验证是否存在污染kubectl描述节点| grep-i污染

第2步:-清除污点,确认已清除。

请注意,该键的末尾附加了一个减号。

kubectl污染节点——所有节点角色。库伯内特斯。io/master-

kubectl污染节点--allnode-role.kubernetes.io/not-ready-

kubectl污染节点--allnode-role.kubernetes.io/unreachable-

第3步:-然后根据您的deployment.yaml文件,我们需要创建Taint。

kubectl污染节点1专用应用程序:my-dedi-app-a:NoSchedule

第4步:-验证是否存在污染kubectl描述节点| grep-i污染

第5步:-部署你的团队。yaml文件kubectl apply-f部署。yaml

您可以在PodSpec中指定pod的容差。以下两种容忍度都“匹配”了上面kubectl污染线产生的污染,因此任何一种容忍度的pod都可以安排在节点1上

https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/

此外,您的descripe pod显示您的部署名称为SpaceStudyControllerts部署。这让我们对你的部署感到困惑。yaml文件,即元数据。名称:我的部署<代码>确保用各自的部署名称描述pod。

我希望这能帮助大家将来参考《圣徒与宽容》。

 类似资料:
  • 我假设上述证书的路径是主机上的路径,python脚本将从中获取文件,然后进行YAML构建? 测试呼叫3: 测试呼叫4:

  • 我正在尝试在minikube(Windows-10)上部署简单的spring boot REST服务。下面是我的配置 Docker文件 docker image运行良好,我能够运行该应用程序。 部署 服务 我无法使用< code > service-IP:node port/Uri < br > http://127 . 0 . 0 . 1:30008/hello访问restendpoint ht

  • 目前,我正试图通过创建Helm图表,在Kubernetes集群上部署我的微服务endpointDocker映像。为此,我创建了图表,并更改了values.yaml和deployment.yaml中的参数以进行端口更改。而且我还想从我的角前端访问。所以我添加了service type=nodeport。当我描述该服务时,它给了我可访问的端口。 我访问了http://node-ip:30983/end

  • 本系列文档介绍使用二进制部署最新 kubernetes v1.6.2 集群的所有步骤,而不是使用 kubeadm 等自动化方式来部署集群。 在部署的过程中,将详细列出各组件的启动参数,它们的含义和可能遇到的问题。 部署完成后,你将理解系统各组件的交互原理,进而能快速解决实际问题。 所以本文档主要适合于那些有一定 kubernetes 基础,想通过一步步部署的方式来学习和了解系统配置、运行原理的人。

  • 本系列文档介绍使用二进制部署最新 kubernetes v1.6.2 集群的所有步骤,而不是使用 kubeadm 等自动化方式来部署集群。

  • 本文档介绍用 3 台服务器构建 Seafile 高可用集群的架构。这里介绍的架构仅能实现“服务高可用”,而不能支持通过扩展更多的节点来提升服务性能。如果您需要“可扩展 + 高可用”的方案,请参考Seafile 可扩展集群文档。 在这种高可用架构中包含3个主要的系统部件: Seafile 服务器:提供 Seafile 服务的软件 MariaDB 数据库集群:保存小部分的 Seafile 元数据,比如