【IBM Cloud k8s 검증 메모】동일한 POD에 있는 2개의 컨테이너간에 제휴하는 방법
그래서, 동일한 POD내에서, 2개의 컨테이너가 통신하는 경우의 방법에 관한 메모입니다.
포드 정보
포드의 개요를 검토해 보면 다음과 같이 기술되었습니다. [4]
포드는 애플리케이션 컨테이너(경우에 따라 여러 컨테이너), 스토리지 리소스, 고유한 네트워크 IP 및 컨테이너 실행 방법을 관리하는 옵션을 캡슐화합니다. Pod는 Kubernetes 애플리케이션의 단일 인스턴스입니다. 단일 컨테이너 또는 긴밀하게 결합되어 리소스를 공유하는 소수의 컨테이너로 구성됩니다."
이 표현을 PHP의 어플리케이션 실행 환경의 일부로 옮겨놓으면 다음과 같은 그림이 됩니다. 이 중에서 이번 주목하는 것은 빨간색 화살표 부분의 실현 방법입니다.
해결책
각 컨테이너에 IP 주소가 부여되는 것이 아니라, Pod에서 같은 IP 주소가 된다면, 그와 동시에 localhost도 공유하고 있는 것입니다. 즉, Web Container의 localhost에서 AP Container의 php-fpm도 포트를 열고 요청을 기다리고 있습니다.
실제로 AP Container에 들어가서 net-tools를 설치하고 netstat로 검사하면 Web Container의 TCP 80번 포트가 보입니다.
$ kubectl exec -it frontend-deploy-1665229993-12gd0 -c app bash
root@frontend-deploy-1665229993-12gd0:/var/www# netstat -natp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 6/nginx: master pro
tcp6 0 0 :::9000 :::* LISTEN 13/php-fpm.conf)
그래서, nginx측의 설정으로, 원래, docker 커멘드의 --link 옵션으로 접속처 컨테이너를 지정한 부분을, 다음과 같이 localhost에 변경하는 것으로, 접속이 가능하게 됩니다.
/etc/nginx/conf.d/default.confserver {
listen 80;
index index.php index.html;
root /var/www;
location / {
try_files $uri /index.php?$args;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass localhost:9000; <--- ここの部分は、--link で与えた名前からlocalhostへ変更する
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
k8s yaml 파일
다음 파일은 kubectl에 제공하는 Deployment YAML 파일의 해당 부분입니다. 영구 볼륨을 공유하는 부분 이외에는 설정할 필요가 없습니다.
s061_web_app_deployment.yml의 spec 부분 발췌 spec:
containers:
- name: app
image: registry.ng.bluemix.net/takara/app:v1
env:
- name: DB_USER
value: root
- name: DB_PASSWORD
value: root
resources: {}
volumeMounts:
- mountPath: /var/www
name: www-vol
subPath: www
- name: web
image: registry.ng.bluemix.net/takara/web:v2
ports:
- containerPort: 80
resources: {}
volumeMounts:
- mountPath: /var/www
name: www-vol
subPath: www
restartPolicy: Always
volumes:
- name: www-vol
persistentVolumeClaim:
claimName: mysql-claim1
참고 자료
[1] Dockerfile을 작성하는 모범 사례 htp // // cs. 도 c r. jp / 엔기네 / 우세 r 구이 데 / 엔 g 낫게 / 도 c 케 r 후우 _ 베 stp 등 c 치세. HTML
[2] Communicate Between Containers in the Same Pod Using a Shared Volume htps : // 곰팡이 s. 이오 / 드 cs / 타 sks / 아세스 s 아 p- 카치 온 - c ぅ s r/
[3] The containers in same pod shares the localhost, so you need not link containers, just use localhost:containerPort. h tps : // s t c ゔ ぇ rf ぉ w. 코 m / 쿠에 s 치온 s / 27103763 / 쿠베 r 네 테 s - 곤푸 쿠라 치온 - ぃん k 콘 네 rs # 코멘 t65978824_31768361
[4] Pod Overview htps : // 곰팡이 s. 이오 / 드 cs / こせ pts /
Reference
이 문제에 관하여(【IBM Cloud k8s 검증 메모】동일한 POD에 있는 2개의 컨테이너간에 제휴하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/MahoTakara/items/aeef24958f5c26da88a6
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
각 컨테이너에 IP 주소가 부여되는 것이 아니라, Pod에서 같은 IP 주소가 된다면, 그와 동시에 localhost도 공유하고 있는 것입니다. 즉, Web Container의 localhost에서 AP Container의 php-fpm도 포트를 열고 요청을 기다리고 있습니다.
실제로 AP Container에 들어가서 net-tools를 설치하고 netstat로 검사하면 Web Container의 TCP 80번 포트가 보입니다.
$ kubectl exec -it frontend-deploy-1665229993-12gd0 -c app bash
root@frontend-deploy-1665229993-12gd0:/var/www# netstat -natp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 6/nginx: master pro
tcp6 0 0 :::9000 :::* LISTEN 13/php-fpm.conf)
그래서, nginx측의 설정으로, 원래, docker 커멘드의 --link 옵션으로 접속처 컨테이너를 지정한 부분을, 다음과 같이 localhost에 변경하는 것으로, 접속이 가능하게 됩니다.
/etc/nginx/conf.d/default.conf
server {
listen 80;
index index.php index.html;
root /var/www;
location / {
try_files $uri /index.php?$args;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass localhost:9000; <--- ここの部分は、--link で与えた名前からlocalhostへ変更する
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
k8s yaml 파일
다음 파일은 kubectl에 제공하는 Deployment YAML 파일의 해당 부분입니다. 영구 볼륨을 공유하는 부분 이외에는 설정할 필요가 없습니다.
s061_web_app_deployment.yml의 spec 부분 발췌 spec:
containers:
- name: app
image: registry.ng.bluemix.net/takara/app:v1
env:
- name: DB_USER
value: root
- name: DB_PASSWORD
value: root
resources: {}
volumeMounts:
- mountPath: /var/www
name: www-vol
subPath: www
- name: web
image: registry.ng.bluemix.net/takara/web:v2
ports:
- containerPort: 80
resources: {}
volumeMounts:
- mountPath: /var/www
name: www-vol
subPath: www
restartPolicy: Always
volumes:
- name: www-vol
persistentVolumeClaim:
claimName: mysql-claim1
참고 자료
[1] Dockerfile을 작성하는 모범 사례 htp // // cs. 도 c r. jp / 엔기네 / 우세 r 구이 데 / 엔 g 낫게 / 도 c 케 r 후우 _ 베 stp 등 c 치세. HTML
[2] Communicate Between Containers in the Same Pod Using a Shared Volume htps : // 곰팡이 s. 이오 / 드 cs / 타 sks / 아세스 s 아 p- 카치 온 - c ぅ s r/
[3] The containers in same pod shares the localhost, so you need not link containers, just use localhost:containerPort. h tps : // s t c ゔ ぇ rf ぉ w. 코 m / 쿠에 s 치온 s / 27103763 / 쿠베 r 네 테 s - 곤푸 쿠라 치온 - ぃん k 콘 네 rs # 코멘 t65978824_31768361
[4] Pod Overview htps : // 곰팡이 s. 이오 / 드 cs / こせ pts /
Reference
이 문제에 관하여(【IBM Cloud k8s 검증 메모】동일한 POD에 있는 2개의 컨테이너간에 제휴하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/MahoTakara/items/aeef24958f5c26da88a6
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
spec:
containers:
- name: app
image: registry.ng.bluemix.net/takara/app:v1
env:
- name: DB_USER
value: root
- name: DB_PASSWORD
value: root
resources: {}
volumeMounts:
- mountPath: /var/www
name: www-vol
subPath: www
- name: web
image: registry.ng.bluemix.net/takara/web:v2
ports:
- containerPort: 80
resources: {}
volumeMounts:
- mountPath: /var/www
name: www-vol
subPath: www
restartPolicy: Always
volumes:
- name: www-vol
persistentVolumeClaim:
claimName: mysql-claim1
[1] Dockerfile을 작성하는 모범 사례 htp // // cs. 도 c r. jp / 엔기네 / 우세 r 구이 데 / 엔 g 낫게 / 도 c 케 r 후우 _ 베 stp 등 c 치세. HTML
[2] Communicate Between Containers in the Same Pod Using a Shared Volume htps : // 곰팡이 s. 이오 / 드 cs / 타 sks / 아세스 s 아 p- 카치 온 - c ぅ s r/
[3] The containers in same pod shares the localhost, so you need not link containers, just use localhost:containerPort. h tps : // s t c ゔ ぇ rf ぉ w. 코 m / 쿠에 s 치온 s / 27103763 / 쿠베 r 네 테 s - 곤푸 쿠라 치온 - ぃん k 콘 네 rs # 코멘 t65978824_31768361
[4] Pod Overview htps : // 곰팡이 s. 이오 / 드 cs / こせ pts /
Reference
이 문제에 관하여(【IBM Cloud k8s 검증 메모】동일한 POD에 있는 2개의 컨테이너간에 제휴하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/MahoTakara/items/aeef24958f5c26da88a6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)