인프런 커뮤니티 질문&답변

쏭지님의 프로필 이미지
쏭지

작성한 질문수

데브옵스(DevOps)를 위한 쿠버네티스 마스터

nodeport tomcat 문의드립니다.

작성

·

494

·

수정됨

0

tomcat으로 노드포트 30002 연동하는게 안되서요.

일단 서비스랑 np, lb 합쳐서 yaml 만드니까 자꾸 에러가 나서 svc.yaml / np-lb.yaml 을 따로 만들어서 create 하였습니다.

tomcat-svc.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: tomcat
  name: tomcat
spec:
  replicas: 1
  selector:
    matchLabels:
      app: tomcat
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: tomcat
    spec:
      containers:
      - image: tomcat
        name: tomcat
        ports:
        - containerPort: 8080
        resources: {}
status: {}

create 성공

 

tomcat-np-lb.yaml

# tomcat-np-lb.yaml
#

# nodeport

apiVersion: v1
kind: Service
metadata:
  name: tomcat-np
spec:
  type: NodePort
  selector:
    app: tomcat
    app.kubernetes.io/name: tomcat
  ports:
    - port: 80
      targetPort: 8080
      nodePort: 30002

---
# LB
#
apiVersion: v1
kind: Service
metadata:
  name: tomcat-lb
spec:
  type: LoadBalancer
  selector:
    app: tomcat
    app.kubernetes.io/name: tomcat
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080

create 성공

 

둘다 성공해서 -o wide 해서 봤는데

  1. LB ip

 

  1. 노드포트(30002) 접속

  • 30228 포트는 LB 포트입니다.

톰캣 자체가 좀 오래 걸려서 기다렸는데도 불구하고 안돼요. 버전을 console/tomcat-7.0으로 변경해도 그대로입니다. connection refused도 계속 되고요.

구글 콘솔로도 확인했는데 deploy랑 전부 만들어진거 확인했습니다.

근데도 톰캣 사이트가 안떠요 ㅜㅜ

어디가 잘못됐는지 잘 모르겠습니다.ㅜㅜ

답변 1

0

안녕하세요 강사 최일선입니다

console/tomcat-7.0를 입력했다고 하셨는데 사용자 아이디에서 e를 제거해야 합니다.

consol/tomcat-7.0으로 구성하시고 실행하시면 잘 동작하실 겁니다.

감사합니다.

쏭지님의 프로필 이미지
쏭지
질문자

안녕하세요 말씀하신대로 consol/tomcat-7.0 으로 변경하였으나 이번에는

image

타임아웃 에러가 뜹니다.

방화벽도 오픈해놨는데 연결이 되지 않습니다.

kubectl get all 명령으로 현재 상태에 대한 결과를 보내주시겠어요?

지금 위에서 확인해보니 디플로이먼트 파드의 레이블이 app: tomcat로 되어 있네요. 서비스에서 레이블을 정확하게 변경하시면 될 것같습니다. 매칭되어야 셀렉팅이 가능해서요. 서비스에서 다음 레이블을 삭제해보시기 바랍니다.

app.kubernetes.io/name: tomcat
쏭지님의 프로필 이미지
쏭지
질문자

app.kubernetes.io/name 이 지워지지 않습니다.image

처음 생성할 때 저걸 지우면 생성이 안되고 에러가 나더라구요

 

kubectl get all 로 했을 때의 결과입니다.

NAME                          READY   STATUS    RESTARTS   AGE     IP          NODE                                       NOMINATED NODE   READINESS GATES
pod/tomcat-6474b75fcf-mnrmj   1/1     Running   0          6m49s   10.4.1.25   gke-cluster-1-default-pool-e52637f9-r26k   <none>           <none>

NAME                 TYPE           CLUSTER-IP    EXTERNAL-IP      PORT(S)        AGE     SELECTOR
service/kubernetes   ClusterIP      10.8.0.1      <none>           443/TCP        100m    <none>
service/tomcat-lb    LoadBalancer   10.8.14.140   104.197.64.206   80:30430/TCP   6m43s   app.kubernetes.io/name=tomcat,app=tomcat
service/tomcat-np    NodePort       10.8.12.126   <none>           80:30002/TCP   6m43s   app.kubernetes.io/name=tomcat,app=tomcat

NAME                     READY   UP-TO-DATE   AVAILABLE   AGE     CONTAINERS   IMAGES   SELECTOR
deployment.apps/tomcat   1/1     1            1           6m50s   tomcat       tomcat   app=tomcat

NAME                                DESIRED   CURRENT   READY   AGE     CONTAINERS   IMAGES   SELECTOR
replicaset.apps/tomcat-6474b75fcf   1         1         1       6m51s   tomcat       tomcat   app=tomcat,pod-template-hash=6474b75fcf

 

image

 

 

consol/tomcat-7.0 으로 변경했을 때

image

gke 에서 테스트 하신 것으로 보이는데 제가 아래와 같이 실행했을 때는 잘 동작하고 있습니다. 만드신 것 삭제후에 다음 코드로 한번 테스트해보시기 바랍니다. 노드의 IP로 접근하신 것이 맞는지도 확인 부탁 드립니다~

cat <<EOF | kubectl apply -f -
apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: tomcat
  name: tomcat
spec:
  replicas: 1
  selector:
    matchLabels:
      app: tomcat
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: tomcat
    spec:
      containers:
      - image: consol/tomcat-7.0
        name: tomcat
        ports:
        - containerPort: 8080
        resources: {}
status: {}
---
# tomcat-np-lb.yaml
#

# nodeport

apiVersion: v1
kind: Service
metadata:
  name: tomcat-np
spec:
  type: NodePort
  selector:
    app: tomcat
  ports:
    - port: 80
      targetPort: 8080
      nodePort: 30002

---
# LB
#
apiVersion: v1
kind: Service
metadata:
  name: tomcat-lb
spec:
  type: LoadBalancer
  selector:
    app: tomcat
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
EOF

gcloud compute firewall-rules create tomcat-np-30002 --allow=tcp:30002 # 방화벽 오픈

kubectl get nodes -o wide # 노드의 IP 확인
쏭지님의 프로필 이미지
쏭지
질문자

강사님께서 주신 코드로는 잘 되네요! 감사합니다.

쏭지님의 프로필 이미지
쏭지

작성한 질문수

질문하기