【发布时间】:2021-12-31 06:23:25
【问题描述】:
我使用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: /$1
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 端点,这里我需要传递也启用了 TLS 的主机('wire.com'),
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 是我的入口公共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/服务 api 端点,这可以通过集成 Ingress 的上下文实现吗?
【问题讨论】:
-
您能否详细说明
through shell of service-2的含义?另外,您使用的是哪个 POD 的 IP? service-1 后面的入口 1 或 pod 的 IP?我真的不明白你想以这种方式实现什么。所有流量都应该通过入口,让入口做路由等。 -
您有两个选择:1 - 通过入口,2 - 直接服务/pod-ip 甚至通过 dns-name 而不使用入口。见dns in kubernetes。换句话说,简单的
curl service-1.NAMESPACE.svc.cluster.local:PORT以及您需要的任何其他内容。 -
嗯,你需要从集群内的另一个 pod 中
curl POD_IP:PORT。 DNS 主要用于服务,但内部可以直接使用cluster-ip。这实际上就是使用ingress的原因 - 将cluster-ip的服务暴露在集群外,因此ingress是集群的一个访问点。 -
另外请检查this is the case
-
@moonkotte,终于可以使用了,
curl -k https://10.22.148.212:32243/GetData,-k 和 https。 :)