如何为本地主机上的 istio-ingressgateway 分配 IP?
How to assign an IP to istio-ingressgateway on localhost?
我正在使用 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 个服务 运行ning 并且喜欢从外部访问:
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
和运行宁pods:
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 地址(记住集群是 运行ning 在我的笔记本电脑)。
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>
。
问题是,如何将 EXTERNAL-IP 分配给 istio-ingressgateway
.
默认情况下,Kubernetes 无法将外部 IP 分配给 LoadBalancer
服务。
此服务类型需要在 GKE、AKS、EKS 等云产品中运行的基础架构支持。
因为你是 运行 笔记本电脑中的这个集群,部署 MetalLB 负载均衡器以获得 EXTERNAL-IP
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
之后,您可以从笔记本电脑访问:http://cluster-ip:30000
不需要为此创建入口。
您应该使用 (30000-32767) 范围内的端口,如所述 below:
If you set the type field to NodePort, the Kubernetes control plane allocates a port from a range specified by --service-node-port-range flag (default: 30000-32767).
首先,你不能让 k8s 给你分配一个外部 IP 地址,因为 LoadBalancer
服务是特定于云提供商的。我猜你可以将你的路由器外部 IP 地址映射到它,但这并不简单。
要访问该服务,您可以这样做:
kubectl edit svc istio-ingressgateway -n istio-system
- 将服务类型从
LoadBalancer
更改为 ClusterIp
。你也可以做 NodePort
。其实你可以跳过这一步,因为 LoadBalancer
服务已经包含 NodePort
和 ClusterIp
。只是为了摆脱 pending 状态。
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
现在您的笔记本电脑 (localhost:8080) 的端口 8080 将映射到 istio-ingressgateway
服务的端口 80。
如果您使用的是 minikube,只需 运行:
$ minikube tunnel
$ k get svc -n istio-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
istio-ingressgateway LoadBalancer 10.111.187.167 127.0.0.1 15021:31949/TCP,80:32215/TCP,443:30585/TCP 9m48s
我正在使用 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 个服务 运行ning 并且喜欢从外部访问:
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
和运行宁pods:
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 地址(记住集群是 运行ning 在我的笔记本电脑)。
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>
。
问题是,如何将 EXTERNAL-IP 分配给 istio-ingressgateway
.
默认情况下,Kubernetes 无法将外部 IP 分配给 LoadBalancer
服务。
此服务类型需要在 GKE、AKS、EKS 等云产品中运行的基础架构支持。
因为你是 运行 笔记本电脑中的这个集群,部署 MetalLB 负载均衡器以获得 EXTERNAL-IP
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
之后,您可以从笔记本电脑访问:http://cluster-ip:30000
不需要为此创建入口。
您应该使用 (30000-32767) 范围内的端口,如所述 below:
If you set the type field to NodePort, the Kubernetes control plane allocates a port from a range specified by --service-node-port-range flag (default: 30000-32767).
首先,你不能让 k8s 给你分配一个外部 IP 地址,因为 LoadBalancer
服务是特定于云提供商的。我猜你可以将你的路由器外部 IP 地址映射到它,但这并不简单。
要访问该服务,您可以这样做:
kubectl edit svc istio-ingressgateway -n istio-system
- 将服务类型从
LoadBalancer
更改为ClusterIp
。你也可以做NodePort
。其实你可以跳过这一步,因为LoadBalancer
服务已经包含NodePort
和ClusterIp
。只是为了摆脱 pending 状态。 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
现在您的笔记本电脑 (localhost:8080) 的端口 8080 将映射到 istio-ingressgateway
服务的端口 80。
如果您使用的是 minikube,只需 运行:
$ minikube tunnel
$ k get svc -n istio-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
istio-ingressgateway LoadBalancer 10.111.187.167 127.0.0.1 15021:31949/TCP,80:32215/TCP,443:30585/TCP 9m48s