【发布时间】:2022-01-19 17:00:30
【问题描述】:
在 Kubernetes 中,我有一个负载均衡器和 2 个 Web 应用程序(名称为 UI 和 Kuard),它们都通过服务和入口规则公开可用,类似于:
库尔德服务:
apiVersion: v1
kind: Service
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |xxx
creationTimestamp: "2022-01-17T15:44:30Z"
labels:
app: kuard
app.kubernetes.io/managed-by: pulumi
name: mykuard
namespace: nginx-test-frwjnfp0
resourceVersion: "975"
uid: 819d94ca-b63d-44d5-9af9-a83da3f4bbd8
spec:
clusterIP: 10.3.250.8
clusterIPs:
- 10.3.250.8
ipFamilies:
- IPv4
ipFamilyPolicy: SingleStack
ports:
- port: 8080
protocol: TCP
targetPort: http
selector:
app: kuard
sessionAffinity: None
type: ClusterIP
status:
loadBalancer: {}
库尔德入口
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: | xxx
kubernetes.io/ingress.class: nginx
pulumi.com/autonamed: "true"
creationTimestamp: "2022-01-17T15:44:42Z"
generation: 2
labels:
app: kuard
app.kubernetes.io/managed-by: pulumi
name: kuard-tuy3sb0v
namespace: nginx-test-frwjnfp0
resourceVersion: "13091"
uid: 4d14f3fc-d116-4233-a717-c38d92741139
spec:
rules:
- host: kuard.xxx.com
http:
paths:
- backend:
service:
name: mykuard
port:
name: http
path: /
pathType: ImplementationSpecific
status:
loadBalancer:
ingress:
- ip: xxx
正如你现在看到的,我可以通过转到kuard.xxx.com 访问 Kuard 应用程序,其中 xxx 是公共 LB IP。
目前,我可以通过在我的 UI 应用程序中硬编码 kuard.xxx.com 从 UI 应用程序导航到 Kuard 应用程序。这很愚蠢,因为我使用的是 WWW 地址而不是内部集群地址。
我可以使用哪个 URL(和入口?)以便根据 UI 应用程序的内部集群地址而不是 WWW URL 在浏览器中打开 Kuard 应用程序?
我尝试在“UI”网络应用程序中硬编码http://mykuard:80,因为Kuard 应用程序的服务名称是mykuard,但我肯定遗漏了一些东西。
【问题讨论】:
-
只有当您的“Kuard”应用程序本身需要访问 UI 时,您才能这样做。如果客户端(最终用户)需要访问 UI,他们需要通过入口访问它,因为那是集群的外部入口点。
http://mykuard:80对于集群间通信是正确的。 -
在ui中包含kuard作为iframe怎么样?
-
我不知道你为什么认为通过入口路由访问 Kuard 服务是“愚蠢的”。 Ingress 是将服务暴露给外部客户端,如浏览器(和 iframe),而内部集群地址用于其他 Pod 直接给每个 Kuard。如果您的“UI”应用程序在 Nginx 或其他东西上运行,那么您可以通过它代理流量,例如
ui.xxx.com/kuard -> http://mykuard:80 -
好的,谢谢你的解释。有关如何设置此类代理的任何提示?
标签: nginx kubernetes service kubernetes-ingress