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

Jac*_*cob 8 kubernetes

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

我像下面的结构一样配置了service.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
Run Code Online (Sandbox Code Playgroud)

我的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"
Run Code Online (Sandbox Code Playgroud)

当我服用时kubectl describe service,输出如下所示,

在此处输入图片说明

我正在尝试访问我部署的 api 像下面这样,

  http://<my-cluster-Worker-NodeIP-Address:31007/<my-deployed-ReST-API-end-point>
Run Code Online (Sandbox Code Playgroud)

更新

当我kubectl describe 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.
Run Code Online (Sandbox Code Playgroud)

我从0/2 nodes are available: 2 node(s) had taints that the pod didn't tolerate.如上所示的describe pod 命令获取事件消息。

当我运行kubectl get nodescommand 时,我得到如下内容,

NAME           STATUS   ROLES    AGE   VERSION
mildevkub020   Ready    master   5d    v1.17.0
mildevkub040   Ready    master   5d    v1.17.0
Run Code Online (Sandbox Code Playgroud)

服务访问哪里出错了?

Aam*_*man 12

如果有一个事件消息,即0/2 nodes are available: 2 node(s) had taints that the pod didn't tolerate. 这意味着您的节点存在污点

第 1 步:- 验证是否存在污点 kubectl describe node | grep -i taint

第 2 步:- 删除污点,验证它已被删除。

请注意,该键使用末尾附加一个减号。

kubectl taint nodes --all node-role.kubernetes.io/master-

kubectl taint nodes --all node-role.kubernetes.io/not-ready-

kubectl taint nodes --all node-role.kubernetes.io/unreachable-

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

kubectl taint nodes node1 dedicated-app:my-dedi-app-a:NoSchedule

第 4 步:- 验证是否存在污点 kubectl describe node | grep -i taint

第 5 步:- 部署您的 .yaml 文件 kubectl apply -f deployment.yaml

您可以在 PodSpec 中为 Pod 指定容忍度。以下两个容忍度“匹配”由上面的 kubectl taint 行创建的污点,因此具有任一容忍度的 pod 都能够调度到node1

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

此外,您describe pod显示您的部署名称是spacestudycontrolalerts-deployment. 这让我们对您的deployment.yaml 文件感到困惑,即metadata.Name: my-deployment。Make sure you describe pod with respective deployment name.

我希望这能帮助大家将来参考 Taints 和 Tolerations。