我正在按照kubernetes教程创建服务https://kubernetes.io/docs/concepts/services-networking/connect-applications-service/#creating-a-service
我在本地环境中使用minikube。一切正常,但我无法卷曲群集IP。我有一个操作超时:
curl: (7) Failed to connect to 10.105.7.117 port 80: Operation timed out
我的kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 5d17h
my-nginx ClusterIP 10.105.7.117 <none> 80/TCP 42h
似乎我遇到的问题与此处未解决他问题的任何答案的人一样:https://github.com/kubernetes/kubernetes/issues/86471
我尝试在gcloud控制台上执行相同的操作,但结果相同。我只能卷曲我的外部IP服务。
如果我理解得很好,那么我启动minikube时应该已经在minikube本地集群中了,所以对我来说我应该能够像本教程中提到的那样卷曲服务。
我做错了什么?
答案 0 :(得分:1)
尽管每个Pod都有一个唯一的IP地址,但是如果没有服务,这些IP不会暴露在群集外部。服务允许您的应用程序接收流量。通过在ServiceSpec中指定type
,可以以不同的方式公开服务:
<NodeIP>:<NodePort>
从群集外部访问服务。 ClusterIP的超集。kind: Service
apiVersion: v1
metadata:
name: example
namespace: example
spec:
type: NodePort
selector:
app: example
ports:
- protocol: TCP
port: 8080
targetPort: 8080
name: ui
然后执行命令:
$ kubectl get svc --namespace=example
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
jenkins-ui NodePort yy.zz.xx.xx <none> 8080:30960/TCP 1d
获取minikube ip
以获得nodeIP
$ minikube ip
aa.bb.cc.dd
然后您可以卷曲它:
curl http://aa.bb.cc.dd:8080
kind: Service
apiVersion: v1
metadata:
name: example
spec:
selector:
app: example
ports:
- protocol: "TCP"
port: 8080
targetPort: 8080
type: LoadBalancer
externalIPs:
- <your minikube ip>
然后您可以卷曲它:
$ curl http://yourminikubeip:8080/
externalName
指定)公开服务。不使用代理。此类型要求kube-dns
的v1.7或更高版本。服务本身仅在群集中公开,但是FQDN external-name
不受群集处理或控制。这可能是可公开访问的URL,因此您可以在任何地方卷曲。您必须以一种限制谁可以访问它的方式来配置域。服务类型externalName在群集外部,实际上仅允许CNAME从群集内部重定向到外部路径。
答案 1 :(得分:0)
ClusterIP仅在kubernetes网络内部可用。
如果您希望能够从群集外部进行访问,请使用LoadBalancer公开一个公共IP,然后可以从群集外部进行访问
或..
kubectl端口转发
然后卷曲
卷曲http:// localhost:8080
它将通过端口转发路由到容器的端口80。