我正在处理舵图,它应该执行以下操作:
- 仅允许通过HTTPS进行外部请求(针对特定服务(
- 允许通过HTTP(对同一特定服务(进行内部请求
我尝试创建两个入口,其中:
- 第一个入口是外部的,只接受HTTPS请求(按预期工作(。我使用了以下说明:
kubernetes.io/ingress.class: nginx
ingress.citrix.com/ssl-passthrough: "true"
nginx.ingress.kubernetes.io/secure-backends: "true"
nginx.ingress.kubernetes.io/actions.ssl-redirect: '{"Type": "redirect", "RedirectConfig": { "Protocol": "HTTPS", "Port": "443", "StatusCode": "HTTP_301"}}'
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
第二个入口是内部的(带有注释
kubernetes.io/ingress.class: "gce-internal"
(。这个目的是只接受来自Minikube集群内部的请求。但它不起作用。- 从Minikube集群外部运行
nslookup <host-name>
会返回** server can't find <host-name>: NXDOMAIN
- 从MInikube集群(
minikube ssh
(内部运行nslookup <host-name>
将返回;; connection timed out; no servers could be reached
- 运行
curl -kv "<host-name>"
返回curl: (6) Could not resolve host: <host-name>
- 从Minikube集群外部运行
关于如何解决这个问题有什么想法吗?
理想情况下,对于内部通信,您应该使用服务名称作为主机名。
然而,你可以将内部入口装箱——这是可能的,但它会给你一个单一的IP地址。使用该IP地址,您可以呼叫该服务。
考虑到您已经在运行Nginx的入口控制器和服务。
您可以编辑ingress服务,并将此注释注入或更新到服务中。
annotations:
cloud.google.com/load-balancer-type: "Internal"
上面的这一行将创建负载均衡器服务,其中internal IP
用于入口。您可以创建入口并使用curl解决它。
https://stackoverflow.com/a/62559152/5525824
仍然使用GCP,如果你没有得到静态IP地址,你可以使用这个片段
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
annotations:
kubernetes.io/ingress.regional-static-ip-name: STATIC_IP_NAME
kubernetes.io/ingress.class: "gce-internal"
更多信息,请访问:https://cloud.google.com/kubernetes-engine/docs/how-to/internal-load-balance-ingress#static_ip_addressing