我在我的笔记本电脑上运行一个kubernetes集群。集群运行在7个VM上,VM的扩展角色如下:
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/来构建一个微服务环境。
我有两个服务正在运行,并希望从外部访问:
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>问题是,我无法从外部访问这些服务,因为我没有外部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如您所见,列外部-IP值为<pending>。
问题是,如何将外部IP分配给istio-ingressgateway。
发布于 2019-11-27 20:34:12
默认情况下,Kubernetes无法将外部IP分配给LoadBalancer服务。这种服务类型需要基础设施支持,它适用于云产品,如GKE、AKS、EKS等。
在您的膝上型计算机中运行此集群时,部署MetalLB负载均衡器以获取EXTERNAL-IP
发布于 2019-11-28 11:15:16
首先,您不能让k8s为您分配外部IP地址,因为LoadBalancer服务是特定于云提供者的。我想,您可以将路由器的外部IP地址映射到它,但这并不简单。
要达到该服务,您可以这样做:
kubectl edit svc istio-ingressgateway -n istio-systemLoadBalancer更改为ClusterIp。您也可以做NodePort。实际上,您可以跳过这个步骤,因为LoadBalancer服务已经包含了NodePort和ClusterIp。它只是为了摆脱挂起的状态。kubectl port-forward svc/istio-ingressgateway YOUR_LAPTOP_PORT:INGRESS_CLUSTER_IP_PORT -n istio-system我不知道你想从本地主机访问哪个端口。比方说80,你可以:
kubectl port-forward svc/istio-ingressgateway 8080:80 -n istio-system
现在,您的笔记本电脑的端口8080 (localhost:8080)将映射到istio-ingressgateway服务的端口80。
发布于 2019-11-27 21:29:54
正如Suresh解释的那样,这是不可能的。
但是,如果您想从您的笔记本电脑访问,您可以使用您的服务类型: NodePort,它允许您从集群外部访问。
您应该首先获得集群的IP,然后使用以下内容创建服务:
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: my-app
type: NodePort
ports:
- name: http
protocol: TCP
port: 3000
targetPort: 3000
nodePort: 30000之后,您可以使用::30000从您的笔记本电脑访问
没有必要为此创造一个入口。
您应该使用范围内的端口(30000-32767),正如所述的下面。
如果将类型字段设置为NodePort,则Kubernetes控制平面将从服务节点-端口范围标志指定的范围内分配端口(默认值: 30000-32767)。
https://stackoverflow.com/questions/59077975
复制相似问题