我在Kubernetes中有一项服务,我必须通过HTTP在多个端口上公开这些服务。
我使用Nginx-Ingress并能够通过端口80成功公开我的服务。(http://serviceA.example.com --> service-a:80
)
但是我不能为Http然后将端口80使用不同的端口。 我该如何告诉nginx-ingress也在7049端口上监听。
我已经尝试在nginx服务上公开端口7049,并将注释nginx.org/listen-ports: "80,7049"
添加到nginx控制器。都不适合我。
我期望以下输出:
http://serviceA.example.com --> service-a:80
http://serviceA.example.com:7049 --> service-a:7049
ingress-service.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
my-service.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
my-service-ingress.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
答案 0 :(得分:2)
入口对象用于仅针对HTTP和HTTPS流量公开应用程序。
在Kubernetes v1.1中添加的Ingress公开了从集群外到集群内服务的HTTP和HTTPS路由。流量路由受Ingress资源上定义的规则控制。
您可以使用其他类型的路由,例如基于路径的路由或基于主机名的路由,但是nginx的端口号将为80或&443。
如果要将应用程序公开在与80和443不同的端口上,则需要使用LoadBalancer类型的服务
答案 1 :(得分:1)
如果您需要在非标准端口(即80/443以外的端口)上公开入口,则可以使用 NodePort 类型的服务。默认情况下,NodePort服务类型在节点上打开服务范围为 30000-32767 的节点上的随机端口。在这种情况下,您需要重写两件事:
1)要覆盖默认的节点端口范围,请在启动apiserver时使用以下标志:--service-node-port-range=7000-9000
2)要在NodePort
服务中强制分配具体端口,请在您的.yaml文件中使用以下服务部署
apiVersion: v1
kind: Service
metadata:
labels:
k8s-app: ingress-nginx
name: ingress-nginx
namespace: ingress-nginx
spec:
ports:
- name: http
nodePort: 7049
protocol: TCP
port: 80
selector:
k8s-app: ingress-nginx
type: NodePort
答案 2 :(得分:0)
如果你修改了 Nginx 入口控制器的服务声明是可能的。在 Nginx deploy.yaml 中,您会发现:
# Source: ingress-nginx/templates/controller-service.yaml
apiVersion: v1
kind: Service
...
spec:
type: LoadBalancer
ports:
- name: http
port: 80
protocol: TCP
targetPort: http
- name: https
port: 443
protocol: TCP
targetPort: https
添加以下代码段以在端口 7049 上也使用 HTTP:
- name: http-symbols
port: 7049
protocol: TCP
targetPort: http
并使用 kubectl apply -f deploy.yaml