【问题标题】:Health Checks failing in target group for k8s application load balancerk8s 应用程序负载均衡器的目标组中的健康检查失败
【发布时间】:2024-01-20 16:29:01
【问题描述】:

我有一个带有应用负载均衡器的 EKS 集群,并为每个应用环境设置了目标组。在我的集群中,我正在从存储在私有 ECR 存储库中的基本 docker 映像构建我的应用程序。我已经确认我的 Pod 能够从私有 ECR 存储库中提取,因为我设置了一个秘密以允许提取私有 ECR 映像。我在基本 docker 映像能够在目标组中进入健康状态时遇到问题。我在部署中更新到 containerPort 以匹配目标组的端口。我不确定这是否需要配置。下面是我为这个命名空间定义一切的方式。我也有用于基本映像的 dockerfile。任何关于如何让基础 Docker 映像进入健康状态以构建我的应用程序的建议都会有所帮助。

dev.yaml

---
apiVersion: v1
kind: Namespace
metadata:
        name: dev
---
apiVersion: apps/v1
kind: Deployment
metadata:
        namespace: dev
        name: dev-deployment
spec:
        selector:
                matchLabels:
                        app.kubernetes.io/name: dev-app
        replicas: 2
        template:
                metadata:
                        labels:
                                app.kubernetes.io/name: dev-app
                spec:
                        containers:
                          - name: dev-app
                            image: xxxxxxxxxxxx.dkr.ecr.us-east-2.amazonaws.com/private/base-docker-image:latest
                            imagePullPolicy: Always
                            ports:
                                    - containerPort: 30411
                        imagePullSecrets:
                        - name: dev
---
apiVersion: v1
kind: Service
metadata:
        namespace: dev
        name: dev-service
spec:
        ports:
                - port: 80
                  targetPort: 80
                  protocol: TCP
        type: NodePort
        selector:
                app.kubernetes.io/name: dev-app
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
        namespace: dev
        name: dev-ingress
        annotations:
                kubernetes.io/ingress.class: alb
                alb.ingress.kubernetes.io/scheme: internet-facing
                alb.ingress.kubernetes.io/target-type: instance
spec:
        rules:
                - http:
                        paths:
                                - path: /*
                                  backend:
                                          serviceName: dev-service
                                          servicePort: 80
---

dockerfile

FROM private/base-docker-image:latest

COPY . /apps
WORKDIR /apps
RUN npm run build

ENV ML_HOST=$HOST ML_PORT=$PORT ML_USER=$USER ML_PASSWORD=$PASSWORD

CMD ["npm", "run", "dockerstart"]

注册目标

健康检查设置

【问题讨论】:

  • 您的服务 targetPort 应设置为部署 yaml 建议的应用程序打开的端口 30411。解决了吗?
  • 非常感谢!

标签: docker kubernetes amazon-eks aws-application-load-balancer amazon-ecr


【解决方案1】:

这是为提高可见性而发布的社区 wiki 答案。

正如 cmets 中所确认的,解决方案是将 targetPort 设置为应用程序打开的端口,即部署的 yaml 配置中提到的 30411

【讨论】:

    最近更新 更多