Kubernetes 前端重定向到后端
Kubernetes redirect front-end to back-end
在 Kubernetes 中,我有一个负载均衡器和 2 个 Web 应用程序(名称为 UI
和 Kuard
),它们 public 都可以通过类似于以下的服务和入口规则使用:
关卡服务:
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 是 public LB IP。
目前我可以通过在我的 UI 应用程序中硬编码 kuard.xxx.com
从 UI
应用程序导航到 Kuard
应用程序。这很愚蠢,因为我使用的是 WWW 地址而不是内部集群地址。
我可以使用哪个 URL(和入口?)根据其内部集群地址从 UI
应用程序在浏览器中打开 Kuard
应用程序,而不是万维网 URL?
我尝试在“UI”网络应用程序中硬编码 http://mykuard:80
,因为 Kuard
应用程序的服务名称是 mykuard
,但我确实遗漏了一些东西.
你想要的不可能。
从浏览器访问服务时,您是从集群外部发出请求。为此,您需要外部 IP。
内部集群地址 (<service-name>:<port>
) 仅用于内部通信(例如 pod 到 pod),由您的内部 DNS 解析,您的浏览器无法访问该地址。
在 Kubernetes 中,我有一个负载均衡器和 2 个 Web 应用程序(名称为 UI
和 Kuard
),它们 public 都可以通过类似于以下的服务和入口规则使用:
关卡服务:
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 是 public LB IP。
目前我可以通过在我的 UI 应用程序中硬编码 kuard.xxx.com
从 UI
应用程序导航到 Kuard
应用程序。这很愚蠢,因为我使用的是 WWW 地址而不是内部集群地址。
我可以使用哪个 URL(和入口?)根据其内部集群地址从 UI
应用程序在浏览器中打开 Kuard
应用程序,而不是万维网 URL?
我尝试在“UI”网络应用程序中硬编码 http://mykuard:80
,因为 Kuard
应用程序的服务名称是 mykuard
,但我确实遗漏了一些东西.
你想要的不可能。
从浏览器访问服务时,您是从集群外部发出请求。为此,您需要外部 IP。
内部集群地址 (<service-name>:<port>
) 仅用于内部通信(例如 pod 到 pod),由您的内部 DNS 解析,您的浏览器无法访问该地址。