我将按照kubernetes教程创建一个服务https://kubernetes.io/docs/concepts/services-networking/connect-applications-service/#creating-a服务
我在本地环境中使用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本地集群中了,所以对我来说,我应该能够像教程中提到的那样卷曲服务。
我做错了什么?
尽管每个Pod都有一个唯一的IP地址,但如果没有服务,这些IP就不会暴露在集群之外。服务允许您的应用程序接收流量。通过在ServiceSpec:中指定type
,可以以不同的方式公开服务
- ClusterIP (默认值(-在群集中的内部IP上公开服务。这种类型使得只能从群集中访问服务。这就是为什么您无法从群集外部通过ClusterIP访问您的服务
-
NodePort
-使用NAT在群集中每个选定节点的同一端口上暴露服务。使用
<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
- LoadBalancer-在当前云中创建一个外部负载平衡器(如果支持(,并为服务分配一个固定的外部IP。NodePort的超级集
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-通过返回带有名称的CNAME记录,使用任意名称(由规范中的
externalName
指定(暴露服务。未使用代理。此类型需要v1.7或更高版本的kube-dns
。服务本身仅在集群中公开,但是FQDNexternal-name
不由集群处理或控制。这可能是一个可公开访问的URL,因此您可以从任何地方进行卷曲。您必须以限制访问权限的方式配置您的域
服务类型externalName在集群外部,实际上只允许CNAME从集群内部重定向到外部路径。
查看更多:电子竞技服务kubernetes。
ClusterIP仅在kubernetes网络内部可用。
如果您希望能够从集群外部访问,请使用LoadBalancer公开一个公共IP,然后您可以从集群外部访问该IP
或者。。
kubectl端口转发<pod_name>8080:80
然后卷曲
卷曲http://localhost:8080
其将通过端口前进到吊舱的端口80。