我有以下服务:
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 请求。
答案 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 你在问题中提到的,它看起来不属于你。这就是为什么我怀疑你在那里随机放置了一个。
相同的地址出现在这个关于 ExternalIP
的 article 中。正如您在此处看到的,这种情况下的地址是 Kubernetes 运行所在节点的 IP 地址。
这是您的案例中的潜在问题。
另一个过于验证您的应用程序是否正在侦听 localhost
或 0.0.0.0
。如果它真的是本地主机,那么这可能是您的另一个潜在问题。您可以更改服务器进程正在侦听的位置。您可以通过侦听 0.0.0.0
来做到这一点,这意味着“侦听所有接口”。
最后,请验证您的服务选择器/端口是否正确,并且您至少有一个 endpoint 支持您的服务。