サービスがエンドポイントを登録していない問題
このセクションでは、Application Load Balancer (ALB) が Kubernetes サービスのエンドポイントを正しく登録しない理由についてトラブルシューティングを行います。ALB が正常に作成されたにもかかわらず、バックエンドサービスの設定に問題があるためアプリケーションにアクセスできません。
ステップ 1: エラーの確認
ALB を通じてアプリケーションにアクセスすると、「Backend service does not exist(バックエンドサービスが存在しません)」というエラーが表示されます:
イングレスは正常に作成されたため、これは Kubernetes イングレスとサービス間の通信に問題があることを示唆しています。
ステップ 2: サービス設定の確認
サービス設定を調べてみましょう:
~$kubectl -n ui get service/ui -o yaml
apiVersion: v1
kind: Service
metadata:
annotations: ...
labels:
app.kubernetes.io/component: service
app.kubernetes.io/created-by: eks-workshop
app.kubernetes.io/instance: ui
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: ui
helm.sh/chart: ui-0.0.1
name: ui
namespace: ui
spec:
ports:
- name: http
port: 80
protocol: TCP
targetPort: http
selector:
app.kubernetes.io/component: service
app.kubernetes.io/instance: ui
app.kubernetes.io/name: ui-app
sessionAffinity: None
type: ClusterIP
status:
loadBalancer: {}
ステップ 3: イングレス設定の確認
次にイングレス設定を確認します:
~$kubectl get ingress/ui -n ui -o yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/healthcheck-path: /actuator/health/liveness
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/target-type: ip
...
finalizers:
- ingress.k8s.aws/resources
generation: 1
name: ui
namespace: ui
resourceVersion: "4950883"
uid: 327b899c-405e-431b-8d67-32578435f0b9
spec:
ingressClassName: alb
rules:
- http:
paths:
- backend:
service:
name: service-ui
port:
number: 80
path: /
pathType: Prefix
...
イングレスが service-ui という名前のサービスを使用するように設定されていますが、実際のサービス名は ui であることに注目してください。
ステップ 4: イングレス設定の修正
イングレスを正しいサービス名を指すように更新しましょう:
~$kubectl apply -k ~/environment/eks-workshop/modules/troubleshooting/alb/creating-alb/fix_ingress
修正後の設定は次のようになります:
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: ui
port:
number: 80