2016-06-16 2 views
0

로컬 kubernetes 설치 (1 개의 마스터 및 1 개 노드, 둘 다 oracle Linux)에서 mysql 서버 인스턴스를 노출하려고하지만 포드에 액세스 할 수 없습니다. .로컬 설치시 kubernetes pod에 대한 원격 액세스 활성화

apiVersion: v1 
kind: Pod 
metadata: 
    name: mysql 
    labels: 
    name: mysql 
spec: 
    containers: 
    - resources: 
     limits : 
      cpu: 1 
     image: docker.io/mariadb 
     name: mysql 
     env: 
     - name: MYSQL_ROOT_PASSWORD 
      value: 123456 
     ports: 
     - containerPort: 3306 
      name: mysql 

그리고 서비스 파일 :

apiVersion: v1 
kind: Service 
metadata: 
    labels: 
    name: mysql 
    name: mysql 
spec: 
    type: NodePort 
    ports: 
    - port: 3306 
     targetPort: 3306 
     nodePort: 30306 
    selector: 
    name: mysql 

내가 포드가 실행되는 것을 볼 수 있습니다

포드 구성이 있습니다

# kubectl get pod mysql 
NAME  READY  STATUS RESTARTS AGE 
mysql  1/1  Running 0   3d 

을 그리고 서비스입니다 엔드 포인트에 연결 :

# kubectl describe service mysql 
Name:   mysql 
Namespace:  default 
Labels:   name=mysql 
Selector:  name=mysql 
Type:   NodePort 
IP:   10.254.200.20 
Port:   <unset> 3306/TCP 
NodePort:  <unset> 30306/TCP 
Endpoints:  11.0.14.2:3306 
Session Affinity: None 
No events. 

kube-proxy가 들어오는 모든 연결에 대해 포트 30306에서 수신 대기 중임을 netstat에서 확인할 수 있습니다.

tcp6  6  0 :::30306    :::*     LISTEN  53039/kube-proxy 

하지만 어떻게 든 로컬 호스트에서도 mysql의 응답을받지 못합니다.

$ telnet [REDACTED] 3306 
Trying [REDACTED]... 
Connected to [REDACTED]. 
Escape character is '^]'. 
N 
[REDACTED]-log�gw&TS(gS�X]G/Q,(#uIJwmysql_native_password^] 

주의 마지막 줄에서 MySQL의 부분 : 일반 MySQL 설치 반면

# telnet localhost 30306 
Trying ::1... 
Connected to localhost. 
Escape character is '^]'. 

는 다음 중 무엇인가로 응답합니다. 마지막 주에

이 kubectl 출력이 :

$ kubectl get service 
NAME   CLUSTER-IP  EXTERNAL-IP PORT(S) AGE 
kubernetes 10.254.0.1  <none>  443/TCP 9d 
mysql  10.254.200.20 nodes   3306/TCP 1h 

하지만 "노드가"외부-IP 열에서 무엇을 의미하는지 이해가 안 돼요.

그래서 내가 원하는 것은 마스터 IP (선호)를 통해 mysql 서비스에 대한 액세스를 여는 것입니다. 어떻게해야합니까? 그리고 내가 뭘 잘못하고 있습니까?

답변

1

그 부하에 투명하게 경로의 모든 연결을 .

-> 이렇게하려면로드 균형 조정기가 필요합니다. 불행히도 기본 Kubernetes 빌딩 블록이 아닙니다.

nginx 포드와 포트를 호스트에 바인드하는 hostPort: <port>을 사용하는 서비스와 같이 트래픽을 미니언에 보내는 리버스 프록시를 설정해야합니다. 이는 포드가 해당 노드에 머물러 있어야한다는 것을 의미하며 노드 이름을 선택자로 사용하는 DaemonSet을 사용하려고합니다.

명백하게 이것은 매우 내결함성이 없으므로 여러 역방향 프록시를 설정하고 DNS 라운드 로빈 분석을 사용하여 트래픽을 프록시 포드 중 하나에 전달할 수 있습니다.

어딘가에 인터넷을 통해 서비스에 대해 이야기하기 위해 고정 IP가 필요하므로 어딘가에 정적 포드가 있어야합니다.

1

kube-proxy 서비스를 통해 클러스터의 각 노드에서 NodePort가 노출됩니다. 에 연결하는 호스트의 IP (Node01)를 사용하여 연결하려면 : 여전히 클라이언트가 하나의 서버에 연결하는 방법을 잘 모르겠어요

telnet [IpOfNode] 30306

+0

방화벽이 kubernetes-proxy를 방해하고 있었기 때문에 포트에서 텔넷을 통해 연결할 수 있었지만 서버에서 응답이 없습니다. 클라이언트를 단일 서버에 연결하는 방법을 아직 모르는 중입니다.이 서버는 모든 연결을 미니언에게 라우팅합니다. –

관련 문제