我在 VMWare Workstation 15 上配置了一个私有 2 节点 Kubernetes 集群。我使用的是 MetalLB 和 Calico。入口服务和入口看起来像:
xxx@c1-cp1:~/Desktop$ kubectl get svc -n ingress-controller-2
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
wsnginx-ingress-nginx-controller LoadBalancer 10.109.117.222 192.168.44.136 80:30167/TCP,443:30680/TCP 24h
wsnginx-ingress-nginx-controller-admission ClusterIP 10.105.103.165 <none> 443/TCP 24h
xxx@c1-cp1:~/Desktop$ kubectl get ing apollo-ingress
NAME CLASS HOSTS ADDRESS PORTS AGE
apollo-ingress wsnginx test.xxx.com 192.168.44.136 80 3h17m
我正在使用 Nat 网络适配器和静态 IPS。我的端口转发配置如下
curl -D- http://192.168.44.136 -H 'Host: test.xxx.com'
从 VM,返回 200 状态,但我无法从主机 Win10 上访问它,127.0.0.1:8080
因为我得到一个404 NGINX NotFound
.
你能帮帮我吗?我究竟做错了什么?我怎么能在我的私人网络中公开它?谢谢!
更新 我不确定这是否是正确的方法,但我设法通过更改一点 Ingress 资源从主机连接。我在注释中添加了主机参数,如
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: apollo-ingress
spec:
ingressClassName: wsnginx
rules:
#- host: test.xxx.com
- http:
paths:
- backend:
service:
name: apollo-service
port:
number: 80
path: /
pathType: Prefix
现在我的入口看起来像这样
NAMESPACE NAME CLASS HOSTS ADDRESS PORTS AGE
default ingress.networking.k8s.io/apollo-ingress wsnginx * 192.168.44.136 80 3h31m
看来我现在也可以从我的主机上访问它了。我有一个 Rest API,所以我刚刚从浏览器打开它http://127.0.0.1:8080
这似乎是缺少 HTTP 标头的简单问题。
首先,简短说明:
只要
Host
在 Ingress 清单中指定了一个字段,就只接受来自该主机的连接。此信息是从Host
HTTP 标头中提取的。如果您未Host
在 Ingress 清单中指定字段,则将接受来自所有来源的请求。您确实第一次正确发送了请求
但是第二次忘记了。
与上述等效的Powershell是
从命令行完成这一切都很好也很容易,但是从 Web 浏览器发送请求有点困难。默认情况下,Web 浏览器不允许您修改请求以包含正确的
Host
标头。然而,这样的功能可以通过扩展来实现: