개발하자

왜 내 쿠버네티스 서비스가 끝점을 찾지 못하지?

Cuire 2022. 11. 10. 08:13
반응형

왜 내 쿠버네티스 서비스가 끝점을 찾지 못하지?

나는 코어에서 쿠버네티스 클러스터를 운영하고 있다.

나는 잘 작동하는 쿠버네티스 복제 컨트롤러를 가지고 있다. 다음과 같습니다.

id: "redis-controller"
kind: "ReplicationController"
apiVersion: "v1beta3"
metadata:
  name: "rediscontroller"
  lables:
    name: "rediscontroller"
spec:
  replicas: 1
  selector:
    name: "rediscontroller"
  template:
    metadata:
      labels:
        name: "rediscontroller"
    spec:
      containers:
        - name: "rediscontroller"
          image: "redis:3.0.2"
          ports:
            - name: "redisport"
              hostPort: 6379
              containerPort:  6379
              protocol: "TCP"

그러나 다음과 같은 복제 컨트롤러의 포드에 대한 서비스가 있습니다.

id: "redis-service"
kind: "Service"
apiVersion: "v1beta3"
metadata:
  name: "redisservice"
spec:
  ports:
    - protocol: "TCP"
      port: 6379
      targetPort: 6379
  selector:
    name: "redissrv"
  createExternalLoadBalancer: true
  sessionAffinity: "ClientIP"

쿠브-벤더 저널은 서비스에 대해 다음과 같이 말하고 있다.

Jul 06 21:18:31 core-01 kube-proxy[6896]: E0706 21:18:31.477535    6896 proxysocket.go:126] Failed to connect to balancer: failed to connect to an endpoint.
Jul 06 21:18:41 core-01 kube-proxy[6896]: E0706 21:18:41.353425    6896 proxysocket.go:81] Couldn't find an endpoint for default/redisservice:: missing service entry

제가 알기로는 올바른 포드와 올바른 포트를 가리키는 서비스가 있는데, 제가 잘못 알고 있는 건가요?

업데이트 1

저는 알렉스가 언급한 것들을 고친 후 다른 서비스에서도 웹 소켓을 사용하는 서비스에서 엔드포인트를 찾을 수 없다는 것을 알게 되었습니다. 이것은 서비스가 폴링할 http 엔드포인트가 필요하다는 것을 의미합니까?




처음 두 가지가 가장 중요한데, 몇 가지가 내게는 웃기게 보인다.

  1. 서비스가 존재하지 않는 것 같습니다. 올바르게 생성되었습니까? 뛰면 나오나요?
  2. 서비스 선택기가 제대로 표시되지 않습니다. 선택기는 복제 컨트롤러의 템플릿에 있는 것과 일치하는 키-값 레이블 쌍이어야 합니다. rc 템플릿의 레이블은 이므로 서비스 선택 도구로도 사용해야 합니다.
  3. 각 개체의 시작 부분에 있는 ID 필드는 무엇입니까? v1beta3에서 유효한 필드가 아닙니다.



특정 경우 포드 규격에 지정한 경우 서비스 규격에 가 있는지 확인합니다. 세부 정보 참조:

그렇지 않은 경우 공식 K8s 서비스 디버깅 가이드를 통해 설정하십시오.

http://kubernetes.io/docs/user-guide/debugging-services/

서비스, DNS, 네트워킹, 큐브 프록시 등에 대한 단계별 체크리스트가 있다.




추가로 확인해야 할 사항이 있습니다.

엔드포인트는 배포가 정상인 경우에만 생성됩니다. 을(를) 잘못 정의했거나 배포가 올바르게 응답하지 않으면 끝점이 생성되지 않습니다.




에서 엔드포인트를 검사해 볼 수 있습니다. 엔드포인트 설명에서 옆에 포드 IP가 표시되면 포드에 문제가 있어 준비가 되지 않았음을 나타냅니다. 이 경우 포드가 엔드포인트에 등록되지 않습니다.

포드가 준비되지 않은 경우 상태/생존 상태 탐침이 실패했기 때문일 수 있습니다.

서비스( )의 'contribute'는 포드( )의 레이블과 일치해야 합니다(예: 선택기 =, 포드 레이블 =). 이렇게 하면 서비스에서 연결을 시도해야 하는 엔드포인트를 결정합니다.


반응형