在GKE上使用静态IP时,服务不会出现

时间:2017-04-14 17:59:59

标签: kubernetes google-cloud-platform google-kubernetes-engine

我已在我的GCP帐户上分配了静态IP。然后,我更新了我的应用程序的服务定义,以便在负载均衡器中使用它,如下所示:

kind: Service
apiVersion: v1
metadata:
  # Unique key of the Service instance
  name: my-app-service
spec:
  ports:
    # Accept traffic sent to port 80
    - name: http
      port: 80
      targetPort: 5000
  selector:
    # Loadbalance traffic across Pods matching
    # this label selector
    app: web
  # Create an HA proxy in the cloud provider
  # with an External IP address - *Only supported
  # by some cloud providers*
  type: LoadBalancer
  # Use the static IP allocated
  loadBalancerIP: 35.186.xxx.xxx

如果我注释掉最后一行并让GKE分配一个短暂的公共IP,那么该服务就可以了。我有什么想法吗?

根据答案中的建议,我创建了一个Ingress,如下所示:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: myapp
  annotations:
    kubernetes.io/ingress.global-static-ip-name: "myapp"
spec:
  backend:
    serviceName: my-app-service
    servicePort: 80

现在,我看到Ingress被分配了正确的静态IP。但是,我的Service也会被分配一个(不同的)公共IP。 IngressService未连接。如果我注释掉type: LoadBalancer行,Service未分配公共IP,但Ingress仍然无法连接。在点击静态IP时我收到default backend - 404响应。我尝试过以不同的顺序创建服务和入口,但也没有帮助。

如果我把它留下足够长的时间,静态IP会将流量路由到我的服务,但服务本身仍然停留在外部IP分配中:

$ kubectl get service my-app-service
NAME                   CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
my-app-service          10.x.x.x        <pending>     80:31432/TCP   12m

1 个答案:

答案 0 :(得分:1)

您需要创建Ingress并使用Ingress for Kubernetes上的kubernetes.io/ingress.global-static-ip-name: "name-of-your-ip"注释才能找到它。

您可以在此处找到教程:https://github.com/kelseyhightower/ingress-with-static-ip#tutorial