Kubernetes无法在给定的IP上看到我的应用程序

S. *_*. N 6 proxy docker kubernetes kubectl

我正在尝试使用Kubernetes运行我的应用程序我已经从名为deployment.yaml 服务的文件中创建了一个部署名称service.yaml

以下是内容deployment.yaml:

apiVersion: v1
kind: Pod

    metadata:
      name: kubectl-test
    spec:
      containers:
        - name: kubectl-test
          image: gcr.io/[my-name]/node-app:0.0.1
          imagePullPolicy: Always
          ports:
            - containerPort: 8080
              hostPort: 8080
Run Code Online (Sandbox Code Playgroud)

这是我的 services.yaml

kind: Service
apiVersion: v1
metadata:
  #Service name
  name: kubectl-test-node-app
spec:
  selector:
    app: kubectl-test-189010
  ports:
    - protocol: TCP
      port: 8000
      targetPort: 8000
  type: LoadBalancer
Run Code Online (Sandbox Code Playgroud)

当我运行命令时kubectl get deployments,我可以看到:

NAME                  DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
kubernetes-bootcamp   1         1         1            1           16m
Run Code Online (Sandbox Code Playgroud)

我可以通过使用看到我的服务kubectl get services,我可以看到:

NAME                    TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
kubectl-test-node-app   LoadBalancer   10.59.242.211   35.195.2.76   8000:31592/TCP   8m
kubernetes              ClusterIP      10.59.240.1     <none>        443/TCP          1d
Run Code Online (Sandbox Code Playgroud)

当我试图访问EXTERNAL-IP:8000我无法看到我的应用程序,我没有得到任何错误,但我不会出现什么问题!

编辑

我必须使用以下方法创建部署:

`kubectl run kubernetes-bootcamp --image=[image-name] --port=8080`
Run Code Online (Sandbox Code Playgroud)

但没有这个命令

`kubectl create -f deployment.yaml`
Run Code Online (Sandbox Code Playgroud)

这与港口有关:8000:31592/TCP

kubectl get pods
kubectl-test                           1/1       Running   0          4h
kubernetes-bootcamp-1654181842-czwqg   1/1       Running   0          3h
Run Code Online (Sandbox Code Playgroud)

编辑

运行该命令kubectl describe services kubectl-test-node-app返回:

Name:                     kubectl-test-node-app
Namespace:                default
Labels:                   <none>
Annotations:              <none>
Selector:                 app=kubectl-test-189010
Type:                     LoadBalancer
IP:                       10.59.242.211
LoadBalancer Ingress:     35.195.2.76
Port:                     <unset>  8000/TCP
TargetPort:               8000/TCP
NodePort:                 <unset>  31592/TCP
Endpoints:                <none>
Session Affinity:         None
External Traffic Policy:  Cluster
Events:
  Type    Reason                Age   From                Message
  ----    ------                ----  ----                -------
  Normal  CreatingLoadBalancer  58m   service-controller  Creating load balancer
  Normal  CreatedLoadBalancer   57m   service-controller  Created load balancer
Run Code Online (Sandbox Code Playgroud)

没有定义端点.我想这是问题所在?我该如何建立终点?

Leo*_*aev 4

您的服务规范针对带有标签“app=kubectl-test-189010”的所有 pod,而您的 pod 规范中没有该标签。

您需要更新 pod 的元数据,以便它与服务规范中的选择器匹配:

    metadata:
       name: kubectl-test
       app: kubectl-test-189010
Run Code Online (Sandbox Code Playgroud)

此外,您的服务接受端口 8000 上的连接,然后将其转发到 pod 上的端口 8000 (targetPort)。但 pod 侦听端口 8080(containerPort)。因此,应更改其中一个以匹配另一个 - targetPort 或 containerPort。

您可以在此处阅读有关在 Kubernetes 中配置服务的更多信息: https: //kubernetes.io/docs/concepts/services-networking/service/