首页 > 解决方案 > 我在 kubernetes 中公开了我的 pod,但我似乎无法与它建立连接

问题描述

我正在尝试公开我在 minikube 上所做的部署:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-test
  labels:
    app: debian
spec:
  replicas: 1
  selector:
    matchLabels:
      app: debian
  strategy: {}
  template:
    metadata:
      labels:
        app: debian
    spec:
      containers:
      - image: agracia10/debian_bash:latest
        name: debian
        ports:
        - containerPort: 8006
        resources: {}
      restartPolicy: Always
status: {}

我决定跟随是写在这里

我尝试使用以下命令公开部署:

kubectl expose pod deployment-test-8497d6f458-xxhgm --type=NodePort --port=8080 --target-port=80

但是当我尝试使用由提供的 url 访问由暴露命令创建的服务时

minikube service deployment-test-8497d6f458-xxhgm --url

它使用数据包发送器尝试连接到服务时抛出错误: 数据包发送器日志

我不太确定这可能是什么原因,我认为这与当我获得服务时它在外部 ip 字段上显示的事实有关。此外,当我尝试使用minikube ip它检索节点 IP 时,它会给出一个地址,但当minikube service --url它给出 127.0.0.1 地址时。在任何情况下,使用任何一个都行不通。

标签: kubernetesminikube

解决方案


由于端口配置不匹配,它无法正常工作。

您在 上运行的部署容器,8006但您已经暴露了8080并且您的目标端口是:--target-port=80

所以由于这个原因它不起作用。

理想的流量如下:

service (node port, cluster IP or any) > Deployment > PODs

下面分享部署和服务的例子

apiVersion: apps/v1
kind: Deployment
metadata:
  name: blog-app-server-instance
  labels:
    app: blog-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: blog-app
  template:
    metadata:
      labels:
        app: blog-app
    spec:
      containers:
      - name: agracia10/debian_bash:latest
        image: blog-app-server
        ports:
        - containerPort: 8006
---
apiVersion: v1
kind: Service
metadata:
  name: blog-app-service
  labels:
    app: blog-app
spec:
  selector:
    app: blog-app
  type: NodePort
  ports:
  - port: 80
    nodePort: 31364
    targetPort: 8006
    protocol: TCP
    name: HTTP

所以我改变的是imageand target port

一旦您的节点端口服务启动并运行,您将在端口8031364上发送请求

我将在内部将请求重定向到容器的目标端口8006

使用此命令,您将部署暴露在错误的目标点上

kubectl expose pod deployment-test-8497d6f458-xxhgm --type=NodePort --port=8080 --target-port=80

理想情况下应该是8006


推荐阅读