首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将IP分配给本地主机上的ingressgateway?

如何将IP分配给本地主机上的ingressgateway?
EN

Stack Overflow用户
提问于 2019-11-27 20:28:43
回答 4查看 6K关注 0票数 3

我在我的笔记本电脑上运行一个kubernetes集群。集群运行在7个VM上,VM的扩展角色如下:

代码语言:javascript
复制
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/来构建一个微服务环境。

我有两个服务正在运行,并希望从外部访问:

代码语言:javascript
复制
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

以及运行舱:

代码语言:javascript
复制
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地址(记住集群正在我的笔记本上运行)。

代码语言:javascript
复制
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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-11-27 20:34:12

默认情况下,Kubernetes无法将外部IP分配给LoadBalancer服务。这种服务类型需要基础设施支持,它适用于云产品,如GKE、AKS、EKS等。

在您的膝上型计算机中运行此集群时,部署MetalLB负载均衡器以获取EXTERNAL-IP

票数 3
EN

Stack Overflow用户

发布于 2019-11-28 11:15:16

首先,您不能让k8s为您分配外部IP地址,因为LoadBalancer服务是特定于云提供者的。我想,您可以将路由器的外部IP地址映射到它,但这并不简单。

要达到该服务,您可以这样做:

  1. kubectl edit svc istio-ingressgateway -n istio-system
  2. 将服务类型从LoadBalancer更改为ClusterIp。您也可以做NodePort。实际上,您可以跳过这个步骤,因为LoadBalancer服务已经包含了NodePortClusterIp。它只是为了摆脱挂起的状态。
  3. 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。

票数 6
EN

Stack Overflow用户

发布于 2019-11-27 21:29:54

正如Suresh解释的那样,这是不可能的。

但是,如果您想从您的笔记本电脑访问,您可以使用您的服务类型: NodePort,它允许您从集群外部访问。

您应该首先获得集群的IP,然后使用以下内容创建服务:

代码语言:javascript
复制
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)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59077975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档