我有一个k8s集群,如下所示
#kubectl get all NAME READY STATUS RESTARTS AGE pod/nginx-ingress-controller-d78c45477-gxm59 1/1 Running 0 8d pod/nginx-ingress-default-backend-5b967cf596-dc8ss 1/1 Running 0 8d NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.245.0.1 443/TCP 9d service/nginx-ingress-controller LoadBalancer 10.245.203.193 A.B.C.D 80:30033/TCP,443:31490/TCP 8d service/nginx-ingress-default-backend ClusterIP 10.245.58.229 80/TCP 8d NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/nginx-ingress-controller 1/1 1 1 8d deployment.apps/nginx-ingress-default-backend 1/1 1 1 8d NAME DESIRED CURRENT READY AGE replicaset.apps/nginx-ingress-controller-d78c45477 1 1 1 8d replicaset.apps/nginx-ingress-default-backend-5b967cf596 1 1 1 8d
如上所述,我有一个外部ip A.B.C.D。
我还有两个域名domainA。com和域B。通用域名格式。
我的DNS设置如下:
对于domainA。通用域名格式:
-----domain A---- A www.domainA.com A.B.C.D -----domain B---- A www.domainB.com A.B.C.D
在我用helm安装两个应用程序后
我得到了
# kubectl describe ingress Name: app1 Namespace: default Address: A.B.C.D Default backend: default-http-backend:80 () Rules: Host Path Backends ---- ---- -------- www.domainA.com app1:80 (10.244.1.15:80,10.244.1.33:80) Annotations: kubernetes.io/ingress.class: nginx Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal CREATE 10m nginx-ingress-controller Ingress default/app1 Normal UPDATE 9m48s nginx-ingress-controller Ingress default/app1 Name: app2 Namespace: default Address: A.B.C.D Default backend: default-http-backend:80 () Rules: Host Path Backends ---- ---- -------- www.domainB.com app2:80 (10.244.1.15:80,10.244.1.33:80) Annotations: kubernetes.io/ingress.class: nginx Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal CREATE 8m24s nginx-ingress-controller Ingress default/app2 Normal UPDATE 7m49s nginx-ingress-controller Ingress default/app2
我不知道为什么后端有两个IP。
www.domainA。com和www.domainB。com可能会路由到相同的ip(10.244.1.15:80),这是我不想要的。
我希望通过虚拟服务器等主机将单个外部ip路由连接到不同的POD
www.domainA.com app1:80 (10.244.1.15:800) ----------------- www.domainB.com app2:80 (10.244.1.33:80)
如何修复配置?
非常感谢。
我的工作设置:
deployment\u app1。yaml:
apiVersion: apps/v1 kind: Deployment metadata: name: app1 spec: replicas: 1 selector: matchLabels: app: app1 template: metadata: labels: app: app1 spec: containers: - name: name image: image ports: - containerPort: 80
deployment_app2.yaml:
apiVersion: apps/v1 kind: Deployment metadata: name: app2 spec: replicas: 1 selector: matchLabels: app: app2 template: metadata: labels: app: app2 spec: containers: - name: name image: image ports: - containerPort: 80
ingress\u app1。yaml:
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: app1 spec: rules: - host: www.domainA.com http: paths: - backend: serviceName: app1 servicePort: 80
ingress_app2.yaml:
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: app2 spec: rules: - host: www.domainB.com http: paths: - backend: serviceName: app2 servicePort: 80
service_app1.yaml:
apiVersion: v1 kind: Service metadata: name: app1 spec: type: ClusterIP selector: app: app1 ports: - name: port1 protocol: TCP port: 80 targetPort: 80
service\u app2。yaml:
apiVersion: v1 kind: Service metadata: name: app2 spec: type: ClusterIP selector: app: app2 ports: - name: port1 protocol: TCP port: 80 targetPort: 80
如果我正确理解了这种情况,您希望将单个外部IP域A和B解析为,单个入口和两个不同的应用程序(每个域一个)。目前的问题是,流量通过正确的路由传送到两个应用程序。
很遗憾,您尚未提供入口和服务配置。这就是为什么我必须解释所有需要的设置:)
这里需要的是有两个不同的应用程序(具有不同的标签),两个不同的服务路由到每个服务的endpoint,以及列出两个域的单个入口。
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: name-virtual-host-ingress
spec:
rules:
- host: domain-A
http:
paths:
- backend:
serviceName: service-A
servicePort: 8080
- host: domain-B
http:
paths:
- backend:
serviceName: Service-B
servicePort: 8080
在这里,我们创建了用于路由2个不同服务的流量的入口
apiVersion: v1
kind: Service
metadata:
name: Service-A
spec:
selector:
app: nginx
...
为了清晰起见,我省略了一半的服务规范。最重要的一点是“选择器”
需要使用2个不同的选择器创建2个服务。您可以使用kubectl get svc-o wide和kubectl get ep检查服务和相应的endpoint
不用说,这两个应用程序应该分别部署,以具有不同的标签。
请检查您的配置并与以上内容进行比较。
希望这有帮助。如有需要,我们将乐于进一步阐述。
我尝试在使用相同nodejs应用程序的两个容器之间实现nginx反向代理负载平衡。 目录结构: docker撰写。yml:
在使用GKE ingress时,我观察到GKE ingress为负载平衡器创建了多个后端服务,这导致后端服务如此之多,我们甚至面临后端服务作为其全局配额的配额耗尽问题。我的问题是,尽管ingress中有多条路径规则,但为什么NGINX ingress controller不像GCE ingress那样创建多个后端服务。我阅读了这里的文档, https://cloud.google.com/kube
所以我正在使用库伯内特斯作为一个辅助项目,它很棒。运行像我这样的小项目更便宜(一个3-5个实例的小集群基本上为我提供了大约30美元/月的GCP所需的一切)。 我唯一努力的领域是尝试使用kubernetes入口资源映射到集群并扇出到我的微服务(它们是小型Go或节点后端)。我有入口映射到不同服务的配置设置,没有问题。 我知道,在创建入口资源时,您可以很容易地让GCP启动负载平衡器。这很好,但这也意味着
在Kubernetes中创建负载平衡器类型的服务时,它是创建一个全新的外部负载平衡器,还是只为负载平衡器类型的第一个服务创建一个负载平衡器,并将该负载平衡器重新用于负载平衡器类型的所有后续服务? 这个问题特别重要,因为为每个服务构建一个单独的负载平衡器对我来说成本太高。 如果它特定于云提供商,我使用Azure,但我很想知道其他云提供商是否不同。
是否可以在没有负载均衡器的情况下在库伯内特斯中使用入口控制器功能(在数字海洋中)。 是否有其他机制允许域名映射到Kubernetes服务;例如,如果我在Kubernetes集群上托管两个WordPress站点: == 域名如何在不显式输入端口号的情况下映射到容器端口8080。 感谢任何帮助。
本文向大家介绍Nginx如何配置负载均衡,包括了Nginx如何配置负载均衡的使用技巧和注意事项,需要的朋友参考一下 Nginx配置负载均衡 使用nginx来配置负载均衡也是比较简单的 首先在http块中配置虚拟域名所对应的地址 然后在server块中配置监听 这样在使用9000端口访问服务器的时候就会进行8080和8082的负载调用 Nginx 负载均衡策略 轮询(默认) 按照时间顺序逐一的分配到