• 카테고리

    질문 & 답변
  • 세부 분야

    데브옵스 · 인프라

  • 해결 여부

    미해결

--target-port=3000 옵션이 먹지 않는 것 같습니다.

23.04.19 17:00 작성 23.04.19 17:19 수정 조회수 334

0

안녕하세요 강의 잘 듣고 있습니다.

강의 내용중의 chk-hn 이미지를 사용하셨는데, 소스를 좀 볼 수 있을까요?

문제는 제 스스로 chk-hn 이미지를 만들어 도커허브에서 내려받아 실행해도,

--target-port=3000 옵션이 먹지 않는 것 같습니다.

kubectl expose deployment chk-hn --type=LoadBalancer --port=80 --target-port=3000

 

C:\Users\tjoeun>curl 192.168.1.11

curl: (28) Failed to connect to 192.168.1.11 port 80 after 21003 ms: Couldn't connect to server

 

[root@m-k8s ~]# kubectl get services
NAME           TYPE           CLUSTER-IP      EXTERNAL-IP    PORT(S)        AGE
chk-hn         LoadBalancer   10.110.168.22   192.168.1.11   80:31690/TCP   5s
deploy-nginx   NodePort       10.105.80.228   <none>         80:32118/TCP   22m
kubernetes     ClusterIP      10.96.0.1       <none>         443/TCP        7h46m
nginx          NodePort       10.111.41.62    <none>         80:30987/TCP   3h47m
[root@m-k8s ~]# kubectl get pods -o wide
NAME                      READY   STATUS             RESTARTS   AGE   IP               NODE     NOMINATED NODE   READINESS GATES
chk-hn-7b767c6d5d-6fqkd   0/1     ImagePullBackOff   0          25m   172.16.221.134   w1-k8s   <none>           <none>
chk-hn-7b767c6d5d-bvqvk   0/1     ImagePullBackOff   0          25m   172.16.103.134   w2-k8s   <none>           <none>
chk-hn-7b767c6d5d-mvhh2   0/1     ImagePullBackOff   0          26m   172.16.132.6     w3-k8s   <none>           <none>
[root@m-k8s ~]# kubectl get svc
NAME         TYPE           CLUSTER-IP      EXTERNAL-IP    PORT(S)        AGE
chk-hn       LoadBalancer   10.100.109.67   192.168.1.11   80:30878/TCP   33m
kubernetes   ClusterIP      10.96.0.1       <none>         443/TCP        30h
[root@m-k8s ~]# kubectl get nodes -o wide
NAME     STATUS   ROLES           AGE   VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION                CONTAINER-RUNTIME
m-k8s    Ready    control-plane   29h   v1.25.0   192.168.1.10    <none>        CentOS Linux 7 (Core)   3.10.0-1127.19.1.el7.x86_64   containerd://1.6.7
w1-k8s   Ready    <none>          29h   v1.25.0   192.168.1.101   <none>        CentOS Linux 7 (Core)   3.10.0-1127.19.1.el7.x86_64   containerd://1.6.7
w2-k8s   Ready    <none>          29h   v1.25.0   192.168.1.102   <none>        CentOS Linux 7 (Core)   3.10.0-1127.19.1.el7.x86_64   containerd://1.6.7
w3-k8s   Ready    <none>          29h   v1.25.0   192.168.1.103   <none>        CentOS Linux 7 (Core)   3.10.0-1127.19.1.el7.x86_64   containerd://1.6.7

 

제 nodejs 소스는 아래와 같습니다. 감사합니다.


const http = require("http");

const hostname = "0.0.0.0";
//const hostname = "127.0.0.1"; // 서버 호스트 이름
const port = 3000; // 서버 포트

const server = http.createServer((req, res) => {
  const host = req.headers.host; // 요청의 호스트 이름
  console.log(`호스트: ${host}`); // 콘솔에 호스트 이름 출력

  res.statusCode = 200;
  res.setHeader("Content-Type", "text/plain; charset=utf-8");
  res.end(
    `안녕하세요, Node.js HTTP 서버입니다!\n접속한 호스트네임과 포트는 ${hostname}:${port}입니다.`
  );
});

server.listen(port, hostname, () => {
  console.log(`서버 실행 중: http://${hostname}:${port}/`);
});

Dockerfile

# 사용할 이미지를 선택합니다.
FROM node:14-alpine

# 앱 디렉토리를 생성하고, 작업 디렉토리로 설정합니다.
WORKDIR /app

# 앱 의존성을 설치합니다.
COPY package*.json ./
RUN npm install

# 앱 소스를 추가합니다.
COPY . .

# 컨테이너에서 사용할 포트를 지정합니다.
EXPOSE 3000

# 컨테이너를 시작할 때 실행할 명령어를 설정합니다.
CMD [ "npm", "start" ]

답변 1

답변을 작성해보세요.

0

안녕하세요

학습용으로 만든거라 보안 자체를 신경 쓰지 않은 것이지만, chk-hn에 대한 Dockerfile이 필요하시다면

이 내용을 보시면 될 것 같습니다.

https://github.com/sysnet4admin/_Book_k8sInfra/blob/main/ch4/4.4.3/echo-hname/Dockerfile

이게 rename 되었다고 보시면 될 것 같습니다.