使用 nginx 入口时,我可以通过 POD IP 地址(而不是主机地址)获得 curl 的响应吗
Can I get response of curl through POD IP address (instead of host address) while using nginx ingress
我正在使用 nginx ingress controller
下面是 2 个服务的入口规则文件:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
namespace: kube-system
annotations:
kubernetes.io/ingress.class: nginx
kubernetes.io/ingress.allow-http: "false"
nginx.ingress.kubernetes.io/ssl-redirect: "false"
nginx.ingress.kubernetes.io/use-regex: "true"
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
tls:
- hosts:
- rewrite.bar.com.com
secretName: ingress-tls
rules:
- host: rewrite.bar.com.com
- http:
paths:
- path: /my-service-1/(.*)
pathType: Prefix
backend:
service:
name: my-service-1
port:
number: 36995
- path: /my-service-2/(.*)
pathType: Prefix
backend:
service:
name: my-service-2
port:
number: 32243
现在通过 service-2 的 shell 使用下面的命令,我可以 curl 到 service-1 api 端点,这里我需要传递主机 ('wire.com'),它是 TLS也启用了,
curl --resolve wire.com:443:10.22.148.179 https://wire.com:32243/GetData
以上使用主机地址的 curl 给我成功响应,这里没有问题!
现在我使用的是 POD 的 IP 地址而不是主机地址,但这不会给我响应,它总是给出类似 curl: (52) Empty reply from server
的错误。这里 10.22.148.179
是我的入口 public IP 地址,10.2.0.58
是我的 POD IP 地址。
curl --resolve enabledservices-dev-aks.honeywell.com:443:10.22.148.179 http//10.2.0.58:32243/GetData
我的目标是通过 IP 地址到达 POD/service api 端点,集成 Ingress 的上下文是否可能?
将此从评论移至回答。
问题是在服务器通过 HTTPS 提供服务时使用了 curl 请求和 HTTP 协议。这就是 (52) Empty reply from server
错误的原因。
通过 curl 请求应该通过指定如下协议来完成:
curl https://test.example.com:8888
Ingress
用作集群的单个入口点,因此可以使用 cluster-ip
服务类型在集群内部公开所有内部服务 - 请参阅 kubernetes service types.
如果需要从集群内部测试 service/pod 内的任何内容,则应从集群执行请求以便能够命中 cluster-ip
,因为 cluster-ip
只能访问在集群内。
我正在使用 nginx ingress controller
下面是 2 个服务的入口规则文件:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
namespace: kube-system
annotations:
kubernetes.io/ingress.class: nginx
kubernetes.io/ingress.allow-http: "false"
nginx.ingress.kubernetes.io/ssl-redirect: "false"
nginx.ingress.kubernetes.io/use-regex: "true"
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
tls:
- hosts:
- rewrite.bar.com.com
secretName: ingress-tls
rules:
- host: rewrite.bar.com.com
- http:
paths:
- path: /my-service-1/(.*)
pathType: Prefix
backend:
service:
name: my-service-1
port:
number: 36995
- path: /my-service-2/(.*)
pathType: Prefix
backend:
service:
name: my-service-2
port:
number: 32243
现在通过 service-2 的 shell 使用下面的命令,我可以 curl 到 service-1 api 端点,这里我需要传递主机 ('wire.com'),它是 TLS也启用了,
curl --resolve wire.com:443:10.22.148.179 https://wire.com:32243/GetData
以上使用主机地址的 curl 给我成功响应,这里没有问题!
现在我使用的是 POD 的 IP 地址而不是主机地址,但这不会给我响应,它总是给出类似 curl: (52) Empty reply from server
的错误。这里 10.22.148.179
是我的入口 public IP 地址,10.2.0.58
是我的 POD IP 地址。
curl --resolve enabledservices-dev-aks.honeywell.com:443:10.22.148.179 http//10.2.0.58:32243/GetData
我的目标是通过 IP 地址到达 POD/service api 端点,集成 Ingress 的上下文是否可能?
将此从评论移至回答。
问题是在服务器通过 HTTPS 提供服务时使用了 curl 请求和 HTTP 协议。这就是 (52) Empty reply from server
错误的原因。
通过 curl 请求应该通过指定如下协议来完成:
curl https://test.example.com:8888
Ingress
用作集群的单个入口点,因此可以使用 cluster-ip
服务类型在集群内部公开所有内部服务 - 请参阅 kubernetes service types.
如果需要从集群内部测试 service/pod 内的任何内容,则应从集群执行请求以便能够命中 cluster-ip
,因为 cluster-ip
只能访问在集群内。