2017-11-26 12 views
0

몇 가지 Java 응용 프로그램에서 구성 설정과 관련하여 문제가 있습니다.kubernetes의 서비스 용 Java 응용 프로그램의 서버 구성

나는 미니 쿠 베타 버전을 사용하고 있습니다. v0.21.0 및 용 도커입니다.

나는 모든 애플 리케이션을 도킹하지만, 애플 리케이션 간의 통신 부분은 나를 괴롭히는 것이다.

나는 응용 프로그램이 server.url 옵션 (application.propertions for java)을 통해 함께 통신 할 필요가 있기 때문에이 작업을 수행하는 방법을 잘 모르겠습니다.

주 앱에는 이라는 두 개의 서버 자바 앱의 URL을 정의해야합니다.

k8의 앱이 (가상 IP 포함) 서비스를 통해 통신한다는 것을 알고 있으며, 각 앱마다이를 수행했습니다. 내가 프런트 엔드 페이지에 도착하면 내가 크롬 콘솔을 통해, 로그인 할 때

그러나 프런트 엔드 응용 프로그램에서

( config.js)

그래서
angular.module('app').constant("CONFIG", { 
     app1_server_URL: "http://app1:8080/app1/", 
     app2_server_URL: "http://app2:8095/" 
}); 

는, 그것은에 시도 http://app1:8080/app1/으로 가야하지만 앱을 찾을 수 없다고 말하고 있습니까? DNS를 해결할 수 없다는 메시지가 app1 인 것 같습니다. Is는 DNS를 해결하지만 (브라우저를 살펴볼 때) http://app1:8080/app1/이 클러스터 외부에서 검색됩니까?

그리고 나는 이런 식으로 뭔가 보이는 내 모든 애플 리케이션을위한 서비스 할 경우 :

apiVersion: v1 
kind: Service 
metadata: 
    name: app1 
    labels: 
    app: app1 
spec: 
    selector: 
    app: app1 
    ports: 
    - protocol: TCP 
    port: 8080 
    name: http 

내가 URL은 다음과 같이 도달 할 수있는 자바 응용 프로그램 속성에 쓸 수 :

server.url=http://app1 

내가 뭘 잘못하고 있는지 확신 할 수 없으므로 조언이 도움이 될 것입니다.

TNX, 톰

답변

1

귀하의 각 응용 프로그램은 프론트 엔드 응용 프로그램입니다. 즉, 코드가 사용자의 브라우저에서 실행됩니다. 그래서 각 응용 프로그램에서 java 응용 프로그램 에 대한 요청은 Kubernetes 클러스터 외부에서 왔습니다.

그러나 ServiceType을 지정하지 않고 kubernetes Service을 만들었습니다. ClusterIP 종류의 Service이 생성됩니다. 이러한 종류의 서비스는 프론트 엔드 애플리케이션의 요청처럼 클러스터 외부에서 들어오는 요청을 허용하지 않습니다. 클러스터 외부에서 들어오는 트래픽을 허용하는 방법이 필요합니다. 필요에 따라이를 달성하는 데는 여러 가지 방법이 있습니다. NodePort 서비스 유형은 정적 포트에서 각 노드의 IP에있는 서비스를 제공합니다.

의이 Service

apiVersion: v1 
kind: Service 
metadata: 
    name: app1 
    labels: 
    app: app1 
spec: 
    type: NodePort 
    selector: 
    app: app1 
    ports: 
    - protocol: TCP 
    targetPort: 80 # Port exposed by Pods behind the Service 
    port: 8080 # Port used when connecting from inside the cluster 
    nodePort: 30140 # Port used when connecting from outside the cluster 
    name: http 

그 방법 다음은 만드는 것이 가정하자, 여러분의 각도 http://192.168.99.100:30140에 요청을 보낼 수있는 응용 프로그램 또는 무엇이든 무엇이든 포트 당신의 minikube의 IP의 및이 예에서 NodePort (30,140으로 할당 된).

Ingress 개체 사용과 같이 Services 이외의 다른 방법으로 트래픽을 클러스터에 수신 할 수 있습니다.

+0

안녕 fiunchinho, 나는 서비스 유형 NodePort를 만들었지 만 디버깅을 위해 지워 버렸습니다. 따라서 app1_server_URL을 사용하는 대신 "http : // app1 : 8080/app1 /"app1_server_URL : "http : // myminikubeIP : 8080/app1 /"을 사용하여 제대로 작동합니까? 하지만 java 응용 프로그램 간의 클러스터 통신을 위해서는 server.url = http : // app1과 같은 구성 요소도 사용해야합니다 (app1은 다른 응용 프로그램의 서비스 임) –

+0

정확합니다. ClusterIP에서 NodePort로 서비스를 변경하면 myminikubeIP : 8080으로 들어오는 트래픽을 허용하지만 app1과 app2 간의 통신도 평소와 같이 계속됩니다. – fiunchinho

+0

흠, 포트 8080은 서비스 (NodePort)가 아닌 포드의 노출 된 포트이기 때문에 서비스 구성에서 targetPort를 설정하고 config.js 파일에서 하드 코드해야합니다. –