본문 바로가기

개발하자

클러스터 외부의 응용 프로그램에서 kubernetes의 게시물 액세스

반응형

클러스터 외부의 응용 프로그램에서 kubernetes의 게시물 액세스

다른 Centos VM에서 실행 중인 다른 애플리케이션에서 Centosvms의 kubernetes(kubebedm)에 배포된 postgresdb에 액세스하려고 합니다. postgres 서비스를 'NodePort' 유형으로 배포했습니다. LoadBalancer 유형은 AWS/Azure와 같은 클라우드 프로바이더에만 구축할 수 있으며 베어메탈 VM에는 구축할 수 없는 것으로 알고 있습니다. 이제 NodePort 유형 서비스로 '입력'을 구성하려고 합니다. 하지만 나는 여전히 kubernetes master에서 kubectl exec $Pod-Name을 사용하는 것 외에는 내 db에 액세스할 수 없다.

내 입력.yaml은

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: postgres-ingress
spec:
  backend:
    serviceName: postgres
    servicePort: 5432

아래와 같은 주소가 표시되지 않습니다

NAME                    HOSTS   ADDRESS    PORTS   AGE
postgres-ingress        *                  80      4m19s

심지어 내 로컬 맥의 pgadmin에서 그것에 접속할 수 없다. 내가 뭘 빼놓았나요?

어떤 도움이든 대단히 감사합니다.




입력은 작동하지 않습니다. HTTP 트래픽용으로만 설계되었으며 Postgres 프로토콜은 HTTP가 아닙니다. 원시 TCP 트래픽만 처리하는 솔루션이 필요한 경우:

  • NodePort 서비스만으로도 충분합니다. 아마 가장 간단한 해결책일 겁니다. 서비스에서 수행하여 포트를 찾은 다음 Postgres 클라이언트를 해당 포트의 노드 VM(포드 또는 서비스가 아님)의 IP에 연결합니다.
  • 포트 포워딩을 사용한 다음 Postgres 클라이언트를 에 연결할 수 있습니다. 로컬 컴퓨터에서 데이터베이스에 액세스할 때 선호하는 방법이지만(매우 편리하고 안전함) 프로덕션 워크로드에는 사용하지 않을 것입니다(Kubectl은 항상 실행 중이어야 하므로 다소 취약하고 최상의 성능을 얻을 수 없습니다).
  • 특수 네트워킹 구성을 수행하는 경우 클러스터 외부에서 서비스 또는 포드 IP에 직접 액세스할 수 있습니다. 포드 및 서비스 CIDR 범위의 트래픽을 k8s 노드로 라우팅해야 합니다. 이 작업에는 VM 하이퍼바이저, 라우터 및 방화벽을 구성하는 작업이 포함되며 Kubernetes 클러스터에 사용하는 CNI(네트워크) 플러그인에 따라 크게 달라집니다.



나는 nodePort 유형 서비스를 추가하여 작동했다

apiVersion: v1
kind: Service
metadata:
  name: postgresql-external
  labels:
    version: 1.0.0
spec:
  selector:
    sfs: postgresql-sfs
  ports:
    - name: postgresql-external
      port: 5432
      targetPort: 5432
      nodePort: 30030
  type: NodePort

enter image description here

셀렉터를 바꾸는 것을 잊지 마세요. 내 것은 우체부의 상태가 좋은 세트를 목표로 했다.


반응형