Kubernetes-Curl一个集群IP服务



我将按照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。

最新更新