Ingress 是否与 ClusterIP 服务一起使用?
Is Ingress working with ClusterIP services?
我已经设置了一些服务和入口来尝试 SSL 终止。我对 LoadBalancer
和 NodePort
服务作为后端没有任何问题,但它对 ClusterIP
服务根本不起作用。
虽然 Ingress 的后端被描述为健康,但我收到了一个 HTTP 错误,该错误不是来自我的应用程序。
$ kubectl describe ing nginx-cluster-ssl-ingress
Name: nginx-cluster-ssl-ingress
Namespace: default
Address: X.X.X.X
Default backend: nginx-cluster-svc:80 (...)
TLS:
ssl-certificate terminates
Rules:
Host Path Backends
---- ---- --------
Annotations:
https-target-proxy: k8s-tps-default-nginx-cluster-ssl-ingress
static-ip: k8s-fw-default-nginx-cluster-ssl-ingress
target-proxy: k8s-tp-default-nginx-cluster-ssl-ingress
url-map: k8s-um-default-nginx-cluster-ssl-ingress
backends: {"k8s-be-30825":"HEALTHY"}
forwarding-rule: k8s-fw-default-nginx-cluster-ssl-ingress
https-forwarding-rule: k8s-fws-default-nginx-cluster-ssl-ingress
Events:
FirstSeen LastSeen Count From SubobjectPath Type Reason Message
--------- -------- ----- ---- ------------- -------- ------ -------
28m 28m 1 {loadbalancer-controller } Normal ADD default/nginx-cluster-ssl-ingress
27m 27m 1 {loadbalancer-controller } Normal CREATE ip: X.X.X.X
HTTP 错误如下:
$ curl http://X.X.X.X/
default backend - 404%
我的问题很简单:它应该与 ClusterIP 服务一起使用吗?如果它应该或多或少地写在文档中,我应该看看哪里可以解决这个问题?
谢谢!
The native GKE Ingress controller do not support ClusterIP
, only NodePort
is working.
非本机 Ingress 控制器(例如 nginx)可以使用 ClusterIP
服务。
GKE 上的 Nginx ingress controller 使用 ClusterIp。但是原生 GKE ingress controller 并不像@samuel-roze
提到的那样
所以像这样使用 Nginx 入口:
kubernetes.io/ingress.class: nginx
如果您正在使用 GKE 集群并且您使用 容器原生负载平衡(通过添加 cloud.google.com/neg: '{"ingress": true}'
注释在你的 ClusterIP 服务中),然后你的 GKE/GCE 入口可以直接与 ClusterIP 服务对话,而不需要它是 NodePort服务。
如果一组条件为真,GKE 会自动添加 cloud.google.com/neg: '{"ingress": true}'
注释。然后你不需要手动添加这个注解来获得容器原生的负载平衡。否则,您将需要添加此注释以获得容器原生负载平衡;然后使您的入口能够直接与 ClusterIP 服务对话。
我已经设置了一些服务和入口来尝试 SSL 终止。我对 LoadBalancer
和 NodePort
服务作为后端没有任何问题,但它对 ClusterIP
服务根本不起作用。
虽然 Ingress 的后端被描述为健康,但我收到了一个 HTTP 错误,该错误不是来自我的应用程序。
$ kubectl describe ing nginx-cluster-ssl-ingress
Name: nginx-cluster-ssl-ingress
Namespace: default
Address: X.X.X.X
Default backend: nginx-cluster-svc:80 (...)
TLS:
ssl-certificate terminates
Rules:
Host Path Backends
---- ---- --------
Annotations:
https-target-proxy: k8s-tps-default-nginx-cluster-ssl-ingress
static-ip: k8s-fw-default-nginx-cluster-ssl-ingress
target-proxy: k8s-tp-default-nginx-cluster-ssl-ingress
url-map: k8s-um-default-nginx-cluster-ssl-ingress
backends: {"k8s-be-30825":"HEALTHY"}
forwarding-rule: k8s-fw-default-nginx-cluster-ssl-ingress
https-forwarding-rule: k8s-fws-default-nginx-cluster-ssl-ingress
Events:
FirstSeen LastSeen Count From SubobjectPath Type Reason Message
--------- -------- ----- ---- ------------- -------- ------ -------
28m 28m 1 {loadbalancer-controller } Normal ADD default/nginx-cluster-ssl-ingress
27m 27m 1 {loadbalancer-controller } Normal CREATE ip: X.X.X.X
HTTP 错误如下:
$ curl http://X.X.X.X/
default backend - 404%
我的问题很简单:它应该与 ClusterIP 服务一起使用吗?如果它应该或多或少地写在文档中,我应该看看哪里可以解决这个问题?
谢谢!
The native GKE Ingress controller do not support ClusterIP
, only NodePort
is working.
非本机 Ingress 控制器(例如 nginx)可以使用 ClusterIP
服务。
Nginx ingress controller 使用 ClusterIp。但是原生 GKE ingress controller 并不像@samuel-roze
提到的那样所以像这样使用 Nginx 入口:
kubernetes.io/ingress.class: nginx
如果您正在使用 GKE 集群并且您使用 容器原生负载平衡(通过添加 cloud.google.com/neg: '{"ingress": true}'
注释在你的 ClusterIP 服务中),然后你的 GKE/GCE 入口可以直接与 ClusterIP 服务对话,而不需要它是 NodePort服务。
如果一组条件为真,GKE 会自动添加 cloud.google.com/neg: '{"ingress": true}'
注释。然后你不需要手动添加这个注解来获得容器原生的负载平衡。否则,您将需要添加此注释以获得容器原生负载平衡;然后使您的入口能够直接与 ClusterIP 服务对话。