无法连接到k8s服务的外部ip

时间:2021-05-05 11:15:29

标签: kubernetes port

我有以下服务:

apiVersion: v1
kind: Service
metadata:
  name: hedgehog
  labels:
    run: hedgehog
spec:
  ports:
  - port: 3000
    protocol: TCP
    name: restful
  - port: 8982
    protocol: TCP
    name: websocket
  selector:
    run: hedgehog
  externalIPs:
    - 1.2.4.120

其中我指定了一个外部IP。 运行 kubectl get services 时,我还在 EXTERNAL-IP 下看到此 IP。 但是,当我执行 curl http://1.2.4.120:3000 时,我会超时。但是,该应用程序应该给我一个响应,因为在部署中的容器内运行的 jar 在本地运行时确实响应了 localhost:3000 请求。

2 个答案:

答案 0 :(得分:0)

如果您看到您的服务类型可能是 cluster IP,请尝试将类型更改为 LoadBalancer

apiVersion: v1
kind: Service
metadata:
  name: http-service
spec:
  clusterIP: 172.30.163.110
  externalIPs:
  - 192.168.132.253
  externalTrafficPolicy: Cluster
  ports:
  - name: highport
    nodePort: 31903
    port: 30102
    protocol: TCP
    targetPort: 30102
  selector:
    app: web
  sessionAffinity: None
  type: LoadBalancer

类似这样的地方 type: LoadBalancer

答案 1 :(得分:0)

首先,您必须了解不能在 ExternalIP 字段中放置任何随机地址。这些地址不由 Kubernetes 管理,由集群管理员或您负责。使用 externalIPs 指定的外部 IP 地址与云提供商分配给 LoadBalancer 类型服务的外部 IP 地址不同。

checked the address 你在问题中提到的,它看起来不属于你。这就是为什么我怀疑你在那里随机放置了一个。

相同的地址出现在这个关于 ExternalIParticle 中。正如您在此处看到的,这种情况下的地址是 Kubernetes 运行所在节点的 IP 地址。 这是您的案例中的潜在问题。

另一个过于验证您的应用程序是否正在侦听 localhost0.0.0.0。如果它真的是本地主机,那么这可能是您的另一个潜在问题。您可以更改服务器进程正在侦听的位置。您可以通过侦听 0.0.0.0 来做到这一点,这意味着“侦听所有接口”。

最后,请验证您的服务选择器/端口是否正确,并且您至少有一个 endpoint 支持您的服务。