当前位置: 首页 > 知识库问答 >
问题:

Kubernetes、负载平衡和Nginx Ingress-AKS

祁飞翰
2023-03-14

堆栈:Azure Kubernetes服务
NGINX Ingress Controller-https://github.com/Kubernetes/ingress-nginx
AKS LoadBalancer
Docker容器

我的目标是创建一个K8s集群,它将允许我在一个IP下使用多个POD,创建一个微服务架构。在使用了大量的教程和文档之后,我的EndGoal没有任何运气。我已经到了能够使用Loadbalancer访问单个部署的地步,但是到目前为止引入ingress并不成功。这些服务被分离到各自的文件中,以便于可读性和控制。

apiVersion: v1
kind: Service
metadata:
  name: backend
spec:
  loadBalancerIP: x.x.x.x
  selector:
    app: ingress-service
    tier: backend
  ports:
  - name: "default"
    port: 80
    targetPort: 80
  type: LoadBalancer
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress-service
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  rules:
  - http:
      paths:
      - path: /api
        backend:
          serviceName: api-service
          servicePort: 80
apiVersion: v1
kind: Service
metadata:
  name: api-service
spec:
  selector:
    app: api
  ports:
    - port: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
   name: api-deployment
spec:
  selector:
    matchLabels:
      app: api
      tier: backend
      track: stable
  replicas: 1
  template:
    metadata:
      labels:
        app: api
        tier: backend
        track: stable
    spec:
      containers:
      - name: api
        image: image:tag
        ports:
        - containerPort: 80
        imagePullPolicy: Always
      imagePullSecrets:
      - name: SECRET

映像中的API正确地暴露在端口80上。

在应用了上面的每一个yml服务和部署之后,我尝试通过LoadBalancer的IP向其中一个api资源发出web请求,但只收到请求的超时。

共有1个答案

麻阳
2023-03-14

在找了足够多的地方后找到了我的答案。基本上,问题是入口控制器在yaml中内置了一个负载均衡器,如上面的注释所述。但是,该LoadBalancer的选择器要求将您的Ingress服务标记为类的一部分。则该入口服务指向连接到您的Pod的每个服务。我还必须做一个小修改,允许在提供的负载均衡器中使用静态IP。

 类似资料:
  • 试图自学如何使用库伯内特斯,但有一些问题。 我的下一步是尝试使用LoadBalancer类型的服务来访问nginx。 我建立了一个新的集群并部署了nginx映像。 然后,我为LoadBalancer设置服务 设置完成后,我尝试使用LoadBalancer入口(我在描述LoadBalancer服务时发现)访问nginx。我收到一个此页面无法工作的错误。 不太确定我哪里出错了。 kubectl获得sv

  • 我必须手动在MS Azure中创建Kubernetes群集,而不是使用AKS。因此: > 我在一个可用性集中创建了2个VM:一个用于k8s master,第二个用于k8s节点。 我创建了外部负载均衡器并将2个VM添加到后端池。 我使用kubes祈祷创建了k8s集群。 我创建了部署和负载均衡器服务: 但LoadBalancer服务外部IP始终处于挂起状态: 此外,telnet azure\u loa

  • 我正在尝试运行一个连接到部署pod的简单负载平衡服务器。 我安装了Docker for Mac edge版本。 问题是,当我尝试向公开的负载均衡器urlhttp://localhost:8081/api/v1/posts/health发出GET请求时,出现的错误是: org.apache.http.localhost:8081响应失败 做的时候: 我得到: 很明显,服务正在运行,但localhos

  • 我有两条溪流。一个是事件流,另一个是数据库更新流。我想用从DB更新流构建的信息丰富事件流。 事件流非常庞大,使用5个字段进行分区。这给了我很好的分配。DB流不那么喋喋不休,并且使用两个字段进行分区。我目前正在使用两个公共字段连接这两个流,并使用flapMap来丰富第一个流。flatMap运算符使用ValueState维护状态,状态由两个公共字段自动键入。 除了实现自定义逻辑来手动提取键并更新维护状

  • 如果您需要在任意端口上公开和负载平衡TCP或UDP服务,您会怎么做?我曾考虑使用ClientIP,这样服务就可以获得自己的VIP,并且可以使用自己想要的任何端口,但问题就变成了,如何将流量路由到这些VIP,并给他们提供友好的DNS名称?是否已经有一个解决方案,或者你必须自己建立一个?使用NodePort或任何意味着名称空间必须共享单个端口范围的解决方案都不是真正可伸缩的或可取的。特别是如果名称空间