私のgcloudコンソールでは、定義されたイングレスについて次のエラーが表示されます。
同期中のエラー:入力仕様の評価中にエラーが発生しました:サービス "monitoring/kube-prometheus"はタイプ "ClusterIP"、予期される "NodePort"または "LoadBalancer"です
(nginxの代わりに)traefikをリバースプロキシとして使用しているため、ClusterIPを使用してイングレスを定義しています。プロセスを理解している限り、すべてのトラフィックはtraefikサービス(Loadbalancerイングレスが定義されている)を介してプロキシされるため、他のすべてのイングレスは実際にNodePortまたはLoadbalancerの代わりにClusterIPを持つ必要がありますか?
質問:
それでは、Google CloudがNodePortまたはLoadBalancerを予期していると警告するのはなぜですか?
(私には)有効な構成であると思われるため、このエラーが発生する理由はわかりません。ただし、エラーをクリアするには、サービスを名前付き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
ありがとう@aayore。私の場合、Google Cloudが干渉しないように、イングレスクラスを明示的に指定する必要がありました。 NginxのイングレスはClusterIp
サービスに満足しているようです。
metadata:
name: foo
annotations:
kubernetes.io/ingress.class: "nginx"