我正在使用kubespray在我的笔记本电脑上运行kubernetes集群。群集在7个虚拟机上运行,虚拟机的角色分布如下:
NAME STATUS ROLES AGE VERSION
k8s-1 Ready master 2d22h v1.16.2
k8s-2 Ready master 2d22h v1.16.2
k8s-3 Ready master 2d22h v1.16.2
k8s-4 Ready master 2d22h v1.16.2
k8s-5 Ready <none> 2d22h v1.16.2
k8s-6 Ready <none> 2d22h v1.16.2
k8s-7 Ready <none> 2d22h v1.16.2
我已经安装了https://istio.io/来构建微服务环境。
我有2个服务正在运行,喜欢从外部访问:
k get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
greeter-service ClusterIP 10.233.50.109 <none> 3000/TCP 47h
helloweb ClusterIP 10.233.8.207 <none> 3000/TCP 47h
和运行的吊舱:
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
default greeter-service-v1-8d97f9bcd-2hf4x 2/2 Running 0 47h 10.233.69.7 k8s-6 <none> <none>
default greeter-service-v1-8d97f9bcd-gnsvp 2/2 Running 0 47h 10.233.65.3 k8s-2 <none> <none>
default greeter-service-v1-8d97f9bcd-lkt6p 2/2 Running 0 47h 10.233.68.9 k8s-7 <none> <none>
default helloweb-77c9476f6d-7f76v 2/2 Running 0 47h 10.233.64.3 k8s-1 <none> <none>
default helloweb-77c9476f6d-pj494 2/2 Running 0 47h 10.233.69.8 k8s-6 <none> <none>
default helloweb-77c9476f6d-tnqfb 2/2 Running 0 47h 10.233.70.7 k8s-5 <none> <none>
问题是,我无法从外部访问服务,因为我没有 EXTERNAL IP 地址(请记住,集群正在我的笔记本电脑上运行)。
k get svc istio-ingressgateway -n istio-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
istio-ingressgateway LoadBalancer 10.233.61.112 <pending> 15020:31311/TCP,80:30383/TCP,443:31494/TCP,15029:31383/TCP,15030:30784/TCP,15031:30322/TCP,15032:30823/TCP,15443:30401/TCP 47h
如您所见,列EXTERNAL-IP的值为<pending>
。
问题是,如何为istio-ingressgateway
分配EXTERNAL-IP。
4条答案
按热度按时间mrzz3bfm1#
首先,您不能让k8s为您分配外部IP地址,因为
LoadBalancer
服务是特定于云提供商的。你可以把你的路由器外部IP地址Map到它,我猜,但这并不是微不足道的。要访问该服务,您可以执行以下操作:
kubectl edit svc istio-ingressgateway -n istio-system
1.将服务类型从
LoadBalancer
更改为ClusterIp
。你也可以做NodePort
。实际上,您可以跳过此步骤,因为LoadBalancer
服务已经包含NodePort
和ClusterIp
。只是为了摆脱那个待定状态。kubectl port-forward svc/istio-ingressgateway YOUR_LAPTOP_PORT:INGRESS_CLUSTER_IP_PORT -n istio-system
我不知道你想从本地主机访问哪个端口。比如说8080,你可以做到:
kubectl port-forward svc/istio-ingressgateway 8080:80 -n istio-system
现在,笔记本电脑的端口8080(localhost:8080)将Map到
istio-ingressgateway
服务的端口80。oewdyzsn2#
默认情况下,Kubernetes无法为
LoadBalancer
服务分配外部IP。这种服务类型需要在云产品(如GKE、AKS、EKS等)中工作的基础设施支持。当您在笔记本电脑中运行此集群时,部署MetalLB Load Balancer以获得
EXTERNAL-IP
zxlwwiss3#
这是不可能的,正如苏雷什解释的那样。
但如果你想从笔记本电脑访问,你可以在你的服务类型中使用:NodePort,它允许您从集群外部进行访问。
你应该首先获取集群的IP,然后创建你的服务,如下所示:
之后,您可以从笔记本电脑访问:http://* cluster-ip**:30000
没有必要为此创建入口。
您应该使用范围(30000-32767)内的端口,如下所示:
如果将type字段设置为NodePort,Kubernetes控制平面将从--service-node-port-range标志指定的范围内分配端口(默认值:30000-32767)。
67up9zun4#
如果你正在使用minikube,只需运行: