在GKE上为我的负载均衡器设置静态外部IP

时间:2017-10-26 02:35:26

标签: kubernetes google-kubernetes-engine

我正在尝试为GKE上的负载均衡器设置静态外部IP,但没有运气。这是我的Kubernetes服务配置文件:

kind: Service
apiVersion: v1
metadata:
  name: myAppService
spec:
  selector:
    app: myApp
  ports:
  - protocol: TCP
    port: 3001
    targetPort: 3001
  type: LoadBalancer
  loadBalancerIP: *********

这不起作用。我希望看到我的外部IP为*********,但它只是说待处理:

➜  git:(master) kubectl get services
NAME         CLUSTER-IP    EXTERNAL-IP   PORT(S)          AGE
kubernetes   *********    <none>        443/TCP          5m
myAppService   *********   <pending>     3001:30126/TCP   5m

更多详情:

➜  git:(master) kubectl describe services
Name:           kubernetes
Namespace:      default
Labels:         component=apiserver
            provider=kubernetes
Annotations:        <none>
Selector:       <none>
Type:           ClusterIP
IP:         *********
Port:           https   443/TCP
Endpoints:      *********
Session Affinity:   ClientIP
Events:         <none>


Name:           myAppService
Namespace:      default
Labels:         <none>
Annotations:        <none>
Selector:       app=myApp
Type:           LoadBalancer
IP:         *********
Port:           <unset> 3001/TCP
NodePort:       <unset> 30126/TCP
Endpoints:
Session Affinity:   None
Events:
  FirstSeen LastSeen    Count   From            SubObjectPath   Type        Reason              Message
  --------- --------    -----   ----            -------------   --------    ------              -------
  5m        20s     7   service-controller          Normal      CreatingLoadBalancer        Creating load balancer
  5m        19s     7   service-controller          Warning     CreatingLoadBalancerFailed  Error creating load balancer (will retry): Failed to create load balancer for service default/myAppService: Cannot EnsureLoadBalancer() with no hosts

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,但是仔细阅读文档后,结果发现我只是错误地保留了静态IP。 类型为LoadBalancer的服务将创建区域性的网络负载平衡器。因此,您保留的静态IP地址也必须是区域性的(在您的群集中)。 当我更改为该解决方案时,一切对我来说都很好...

答案 1 :(得分:1)

这也让我陷入困境,希望有人能对此有所帮助。

除了Dirk所说的以外,如果您碰巧保留了一个与区域地址相对的全局静态IP地址;您需要按照文档中的说明使用Ingres:Configuring Domain Names with Static IP Addresses,尤其是步骤2b。

因此,基本上,您保留静态IP gcloud compute addresses create helloweb-ip --global

并添加一个Ingres:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: helloweb
# this is where you you add your reserved ip
  annotations:
    kubernetes.io/ingress.global-static-ip-name: helloweb-ip 
  labels:
    app: hello
spec:
  backend:
    serviceName: helloweb-backend
    servicePort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: helloweb-backend
  labels:
    app: hello
spec:
  type: NodePort
  selector:
    app: hello
    tier: web
  ports:
  - port: 8080
    targetPort: 8080

文档还描述了如果您在步骤2a下选择“ LoadBalancer”类型,则如何分配静态IP。

答案 2 :(得分:-2)

经过一段时间的搜索,通过不必要的复杂和冗长的文档,这个简单的博客解决了我的问题:http://terrenceryan.com/blog/index.php/making-kubernetes-ip-addresses-static-on-google-container-engine/