web-dev-qa-db-ja.com

ClusterIPを使用すると、Google Cloudでエラーが表示されるのはなぜですか

私のgcloudコンソールでは、定義されたイングレスについて次のエラーが表示されます。

同期中のエラー:入力仕様の評価中にエラーが発生しました:サービス "monitoring/kube-prometheus"はタイプ "ClusterIP"、予期される "NodePort"または "LoadBalancer"です

(nginxの代わりに)traefikをリバースプロキシとして使用しているため、ClusterIPを使用してイングレスを定義しています。プロセスを理解している限り、すべてのトラフィックはtraefikサービス(Loadbalancerイングレスが定義されている)を介してプロキシされるため、他のすべてのイングレスは実際にNodePortまたはLoadbalancerの代わりにClusterIPを持つ必要がありますか?

質問:

それでは、Google CloudがNodePortまたはLoadBalancerを予期していると警告するのはなぜですか?

enter image description here

13
kentor

(私には)有効な構成であると思われるため、このエラーが発生する理由はわかりません。ただし、エラーをクリアするには、サービスを名前付きNodePortに切り替えることができます。次に、番号の代わりにポート名を使用するようにイングレスを切り替えます。例えば:

サービス:

apiVersion: v1
kind: Service
metadata:
  name: testapp
spec:
  ports:
  - name: testapp-http # ADD THIS
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: testapp
  type: NodePort

イングレス:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: testapp
spec:
  rules:
  - Host: hostname.goes.here
    http:
      paths:
      - backend:
          serviceName: testapp
          # USE THE PORT NAME FROM THE SERVICE INSTEAD OF THE PORT NUMBER
          servicePort: testapp-http
        path: /

更新:

これは、Googleから受け取った説明です。

デフォルトではサービスはClusterIP [1]であり、このタイプのサービスはクラスター内からアクセスできるようになっています。 kube-proxyを使用すると、外部からアクセスできます。イングレスで直接アクセスすることはできません。

提案として、私は個人的にこの記事[2]がこれらのタイプのサービスの違いを理解するのに役立つと思います。

[1] https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types

[2] https://medium.com/google-cloud/kubernetes-nodeport-vs-loadbalancer-vs-ingress-when-should-i-use-what-922f010849e

6
aayore

ありがとう@aayore。私の場合、Google Cloudが干渉しないように、イングレスクラスを明示的に指定する必要がありました。 NginxのイングレスはClusterIpサービスに満足しているようです。

metadata:
  name: foo
  annotations:
    kubernetes.io/ingress.class: "nginx"
3