2017-05-04 6 views
1

kubernetes 1.3.0을 사용하여 kubernetes 환경을 설정하고 동일한 호스트에서 노드와 노드를 실행하면 하나의 RC, 도커가있는 하나의 서비스가있는 Tomcat 웹 응용 프로그램이 실행됩니다. curl 명령으로 내부 네트워크를 통해 서비스에 액세스 할 수 있지만 공개 IP로 인터넷에서 서비스에 액세스하려고하면 실패합니다.외부 네트워크를 통해 kubernetes 서비스에 액세스 할 수 없습니다

RC의 구성은 다음과 같습니다

apiVersion: v1 
kind: ReplicationController 
metadata: 
    name: myweb 
spec: 
    replicas: 2 
    selector: 
     app: myweb 
    template: 
     metadata: 
     labels: 
      app: myweb 
     spec: 
     containers: 
     - name: myweb 
      image: kubeguide/tomcat-app:v1 
      ports: 
      - containerPort: 8080 
      env: 
      - name: MYSQL_SERVICE_HOST 
      value: "mysql" 
      - name: MYSQL_SERVICE_PORT 
      value: '3306' 

의 서비스 구성은 다음과 같습니다

보시다시피
apiVersion: v1 
kind: Service 
metadata: 
    name: myweb 
spec: 
    type: NodePort 
    ports: 
    - port: 8080 
     nodePort: 30001 
    selector: 
    app: myweb 

, 서비스 청취 포트는 Kubernetes 서비스에서 듣는 30001 포트, 그것은 될 수 없습니다 인터넷을 통해 액세스 할 수 있지만 동일한 호스트에서 nc -l 30001 명령을 사용하면 인터넷을 통해 액세스 할 수 있으므로 네트워킹 구성이 시스템 계층에서 문제가되지 않습니다.

호스트의 iptables 설정에 대해 모든 연결을 허용하지만 문제는 계속 발생합니다.

왜 kubernetes 서비스로 액세스 할 수 있습니까? 내가 놓친 구성이 있습니까?

답변

0

호스트 네트워크를 사용하여 kubernetes 서비스를 제공하려면 Ingress 규칙을 사용할 수 있습니다.

참조하십시오 https://kubernetes.io/docs/concepts/services-networking/ingress/

를 귀하의 경우에는 다음과 같이 유입 규칙이 될 것입니다. apiVersion: extensions/v1beta1 kind: Ingress metadata: name: nginx-test spec: rules: - host: test.example.com http: paths: - backend: serviceName: myweb servicePort: 30001 path:/

+0

감사합니다. 나는 네가 아직 말한 것처럼하지 않는다. 왜냐하면 나는 그것이 kubernetes의 선진 기술이라는 것을 알았 기 때문에, 나는 나의 연구와 함께 그것을 앞으로 시도 할 것이다. 하지만 당신이 nginx proxypass로 말했듯이, 그것도 작동합니다. 응용 프로그램에 액세스 할 수 있습니다. –