web-dev-qa-db-ja.com

GKEのロードバランサーに静的外部IPを設定します

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

何か案は?

11
jcgh582

これは私も行き詰まりました、誰かがこれが役立つと思うことを願っています。

Dirk が言ったことに加えて、地域の静的IPアドレスとは対照的にグローバルな静的IPアドレスを予約した場合。ドキュメントでここに説明されているように、Ingresを使用する必要があります。 静的IPアドレスを使用したドメイン名の構成 具体的にはステップ2b。

したがって、基本的に静的IPを予約しますgcloud compute addresses create helloweb-ip --global

アングルを追加します。

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を割り当てる方法についても説明しています。

5
chriz

同じ問題が発生しましたが、ドキュメントを注意深く読んだ後、静的IPを誤って予約していたことがわかりました。タイプLoadBalancerのサービスは、地域のネットワークロードバランサーを作成します。したがって、予約する静的IPアドレスも(クラスターのレゴインで)リージョナルである必要があります。このソリューションに変更したとき、すべてがうまくいきました...

4
Dirk Jablonski