如何将请求代理到 Kubernetes 中的外部端口?
How can I proxy requests to an External Port in Kubernetes?
我在本地网络的一个端口上有一个 Web 服务 运行,暴露在端口 6003 上。我在同一网络上的另一台机器上也有一个 Kubernetes 集群 运行,它使用 Nginx代理集群中所有服务的入口。如何设置代理到机器的入口?我有一个有效的设置。但是现在,我要么在 nginx pod 上收到 DNS 错误,要么在浏览器中响应超时,但没有任何反应。
这是我一直在使用的清单。
apiVersion: v1
kind: Service
metadata:
name: myservice-service
spec:
type: ExternalName
externalName: 192.xxx.xx.x
ports:
- name: myservice
port: 80
protocol: TCP
targetPort: 6003
---
apiVersion: v1
kind: Endpoints
metadata:
name: myservice-ip
subsets:
- addresses:
# list all external ips for this service
- ip: 192.xxx.xx.x
ports:
- name: myservice
port: 6003
protocol: TCP
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: service.example.com
annotations:
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
spec:
rules:
- host: service.example.com
http:
paths:
- backend:
serviceName: myservice-service
servicePort: 80
path: /
tls:
- secretName: secret-prod-tls
hosts:
- service.example.com
编辑以获取更多信息:
这个清单确实有效。我意识到你 必须 指定 https 即使入口有一个 tls 块。不过,这仍然在 Nginx-ingress pod 中显示 Lua DNS 错误。
此处不需要 ExternalName。通常的无头服务将完成这项工作:
apiVersion: v1
kind: Service
metadata:
name: external-ip
spec:
ports:
- name: http
port: 80
clusterIP: None
type: ClusterIP
---
apiVersion: v1
kind: Endpoints
metadata:
name: external-ip
subsets:
- addresses:
- ip: 172.17.0.5
ports:
- name: http
port: 80
如果上游侦听 HTTPS 请求,您必须在入口资源中指定 nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
。所以,这与后端有关,而不是入口本身。
TLS 配置用于 Ingress(前端),不适用于后端应用程序。
我在本地网络的一个端口上有一个 Web 服务 运行,暴露在端口 6003 上。我在同一网络上的另一台机器上也有一个 Kubernetes 集群 运行,它使用 Nginx代理集群中所有服务的入口。如何设置代理到机器的入口?我有一个有效的设置。但是现在,我要么在 nginx pod 上收到 DNS 错误,要么在浏览器中响应超时,但没有任何反应。
这是我一直在使用的清单。
apiVersion: v1
kind: Service
metadata:
name: myservice-service
spec:
type: ExternalName
externalName: 192.xxx.xx.x
ports:
- name: myservice
port: 80
protocol: TCP
targetPort: 6003
---
apiVersion: v1
kind: Endpoints
metadata:
name: myservice-ip
subsets:
- addresses:
# list all external ips for this service
- ip: 192.xxx.xx.x
ports:
- name: myservice
port: 6003
protocol: TCP
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: service.example.com
annotations:
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
spec:
rules:
- host: service.example.com
http:
paths:
- backend:
serviceName: myservice-service
servicePort: 80
path: /
tls:
- secretName: secret-prod-tls
hosts:
- service.example.com
编辑以获取更多信息: 这个清单确实有效。我意识到你 必须 指定 https 即使入口有一个 tls 块。不过,这仍然在 Nginx-ingress pod 中显示 Lua DNS 错误。
此处不需要 ExternalName。通常的无头服务将完成这项工作:
apiVersion: v1
kind: Service
metadata:
name: external-ip
spec:
ports:
- name: http
port: 80
clusterIP: None
type: ClusterIP
---
apiVersion: v1
kind: Endpoints
metadata:
name: external-ip
subsets:
- addresses:
- ip: 172.17.0.5
ports:
- name: http
port: 80
如果上游侦听 HTTPS 请求,您必须在入口资源中指定 nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
。所以,这与后端有关,而不是入口本身。
TLS 配置用于 Ingress(前端),不适用于后端应用程序。