入口重定向到本地主机 tcp 服务
Ingress redirect to a localhost tcp service
我有一个本地网站。
该网站是由 docker-compose 创建的,它正在侦听本地主机端口 3000。
当我尝试时:
curl 127.0.0.1:3000
我可以看到回复。
我做了什么:
我从我的域名提供商那里编辑了 DNS 以指向我的服务器,然后我更改了 nginx-ingress:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: virtual-host-ingress
namespace: ingress-basic
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/ssl-redirect: "true"
nginx.ingress.kubernetes.io/use-regex: "true"
cert-manager.io/cluster-issuer: "letsencrypt-pp"
spec:
tls:
- hosts:
- nextformulainvesting.com
secretName: ***
rules:
- host: "nextformulainvesting.com"
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: e-frontend-saleor
port:
number: 80
我创建了服务:
apiVersion: v1
kind: Service
metadata:
name: e-frontend-saleor
spec:
ports:
- protocol: TCP
port: 80
targetPort: 3000
但是无论有没有服务,我都会收到错误 503 Service Temporarily Unavailable
。
如何使用 nginx-ingress 指向我本地的 TCP 服务?
您创建的 服务 用于将流量转发到 deployments
由于您的服务 运行 在 Kubernetes 集群之外,在这种情况下您应该使用 Endpoint
apiVersion: v1
kind: Endpoints
metadata:
name: my-service
subsets:
- addresses:
- IP: <External IP>
ports:
- port: 3000
并且您可以使用此 端点 进入,以便它路由流量。
入口
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: virtual-host-ingress
namespace: ingress-basic
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/ssl-redirect: "true"
nginx.ingress.kubernetes.io/use-regex: "true"
cert-manager.io/cluster-issuer: "letsencrypt-pp"
spec:
tls:
- hosts:
- nextformulainvesting.com
secretName: ***
rules:
- host: "nextformulainvesting.com"
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: my-service
port:
number: 3000
为了澄清这个问题,我发布了一个社区维基答案。
提供了有助于解决此问题的答案。基于此-案例的线索是为外部服务器手动创建服务和端点对象。
之后可以创建一个 Ingress 对象,该对象将指向具有足够端口的服务 external-ip
。
以下是 中提供的对象示例。
- 服务和端点对象:
apiVersion: v1
kind: Service
metadata:
name: external-ip
spec:
ports:
- name: app
port: 80
protocol: TCP
targetPort: 5678
clusterIP: None
type: ClusterIP
---
apiVersion: v1
kind: Endpoints
metadata:
name: external-ip
subsets:
- addresses:
- ip: 10.0.40.1
ports:
- name: app
port: 5678
protocol: TCP
- 入口对象:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: external-service
spec:
rules:
- host: service.example.com
http:
paths:
- backend:
serviceName: external-ip
servicePort: 80
path: /
另见 this reference。
我有一个本地网站。 该网站是由 docker-compose 创建的,它正在侦听本地主机端口 3000。
当我尝试时:
curl 127.0.0.1:3000
我可以看到回复。
我做了什么:
我从我的域名提供商那里编辑了 DNS 以指向我的服务器,然后我更改了 nginx-ingress:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: virtual-host-ingress
namespace: ingress-basic
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/ssl-redirect: "true"
nginx.ingress.kubernetes.io/use-regex: "true"
cert-manager.io/cluster-issuer: "letsencrypt-pp"
spec:
tls:
- hosts:
- nextformulainvesting.com
secretName: ***
rules:
- host: "nextformulainvesting.com"
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: e-frontend-saleor
port:
number: 80
我创建了服务:
apiVersion: v1
kind: Service
metadata:
name: e-frontend-saleor
spec:
ports:
- protocol: TCP
port: 80
targetPort: 3000
但是无论有没有服务,我都会收到错误 503 Service Temporarily Unavailable
。
如何使用 nginx-ingress 指向我本地的 TCP 服务?
您创建的 服务 用于将流量转发到 deployments
由于您的服务 运行 在 Kubernetes 集群之外,在这种情况下您应该使用 Endpoint
apiVersion: v1
kind: Endpoints
metadata:
name: my-service
subsets:
- addresses:
- IP: <External IP>
ports:
- port: 3000
并且您可以使用此 端点 进入,以便它路由流量。
入口
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: virtual-host-ingress
namespace: ingress-basic
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/ssl-redirect: "true"
nginx.ingress.kubernetes.io/use-regex: "true"
cert-manager.io/cluster-issuer: "letsencrypt-pp"
spec:
tls:
- hosts:
- nextformulainvesting.com
secretName: ***
rules:
- host: "nextformulainvesting.com"
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: my-service
port:
number: 3000
为了澄清这个问题,我发布了一个社区维基答案。
之后可以创建一个 Ingress 对象,该对象将指向具有足够端口的服务 external-ip
。
以下是
- 服务和端点对象:
apiVersion: v1
kind: Service
metadata:
name: external-ip
spec:
ports:
- name: app
port: 80
protocol: TCP
targetPort: 5678
clusterIP: None
type: ClusterIP
---
apiVersion: v1
kind: Endpoints
metadata:
name: external-ip
subsets:
- addresses:
- ip: 10.0.40.1
ports:
- name: app
port: 5678
protocol: TCP
- 入口对象:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: external-service
spec:
rules:
- host: service.example.com
http:
paths:
- backend:
serviceName: external-ip
servicePort: 80
path: /
另见 this reference。