我在 Kubernetes 中有一项服务,我必须通过 HTTP 在多个端口上公开该服务。
我使用 Nginx-Ingress 并且能够成功地通过端口 80 公开我的服务。(http://serviceA.example.com --> service-a:80
)
但是我无法为 Http 使用与端口 80 不同的端口。 我怎样才能让 nginx-ingress 也监听端口 7049。
我已经尝试在 nginx 服务上公开端口 7049,并向 nginx Controller 添加注释 nginx.org/listen-ports: "80,7049"
。两者都不适合我。
我希望得到以下输出:
http://serviceA.example.com --> service-a:80
http://serviceA.example.com:7049 --> service-a:7049
入口服务.yml
apiVersion: v1
kind: Service
metadata:
name: nginx-ingress
namespace: nginx-ingress
spec:
externalTrafficPolicy: Local
type: LoadBalancer
ports:
- port: 80
targetPort: 80
protocol: TCP
name: http
- port: 443
targetPort: 443
protocol: TCP
name: https
selector:
app: nginx-ingress
我的服务.yml
apiVersion: v1
kind: Service
metadata:
name: my-service
labels:
app: my-service
spec:
ports:
- port: 80
targetPort: 80
protocol: TCP
name: http
- port: 443
targetPort: 443
protocol: TCP
name: https
- port: 7049
targetPort: 7049
name: symbols
selector:
app: my-service
我的服务入口.yml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: my-service
spec:
rules:
- host: myservice.example.com
http:
paths:
- path: /
backend:
serviceName: my-service
servicePort: 80
最佳答案
Ingress 对象用于为 HTTP 和 HTTPS 流量仅公开应用程序。
Ingress, added in Kubernetes v1.1, exposes HTTP and HTTPS routes from outside the cluster to services within the cluster. Traffic routing is controlled by rules defined on the Ingress resource.
您可以使用不同类型的路由,例如基于路径或基于主机名的路由,但 nginx 的端口号将为 80 或 & 443。
如果你想在不同于 80 和 443 的端口上公开你的应用程序,你需要使用 LoadBalancer类型服务
关于nginx - 如何在入口处通过 HTTP 在多个端口上公开服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55401373/