포드의 컨테이너 내부에서 포드의 자체 IP 주소를 아는 방법은 무엇입니까?
Kubernetes는 각 컨테이너에 대해 IP 주소를 할당하지만 포드의 컨테이너에서 IP 주소를 얻으려면 어떻게해야합니까? 문서에서 방법을 찾을 수 없습니다.
가장 간단한 대답은 아래 정의 된 구성 블록을 추가하여 포드 또는 복제 컨트롤러 yaml / json 파일이 포드 IP를 환경 변수로 추가하도록하는 것입니다. (아래 블록은 추가로 포드에서 이름과 네임 스페이스를 사용할 수 있도록합니다.)
env:
- name: MY_POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: MY_POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: MY_POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
포드 / rc를 다시 만든 다음 시도하십시오.
echo $MY_POD_IP
또한 env
kubernetes가 제공하는 다른 기능을 확인하기 위해 실행 합니다.
건배
일부 설명 (정말 답변이 아님)
kubernetes에서는 모든 포드에 IP 주소가 할당되고 포드의 모든 컨테이너에는 동일한 IP 주소가 할당됩니다. 따라서 Alex Robinson이 답변 에서 언급했듯이 hostname -i
컨테이너 내부를 사용 하여 포드 IP 주소를 가져올 수 있습니다.
두 개의 멍청한 컨테이너를 실행하는 포드로 테스트했으며 실제로 hostname -i
두 컨테이너 내에서 동일한 IP 주소를 출력했습니다. 또한 그 IP는 kubectl describe pod
외부에서 얻은 IP와 동일하여 IMO 전체를 검증합니다.
그러나 PiersyP의 대답 은 더 깨끗해 보입니다.
출처
에서 는 Kubernetes 워드 프로세서 :
포드의 애플리케이션은 모두 동일한 네트워크 네임 스페이스 (동일한 IP 및 포트 공간)를 사용하므로 서로 "찾고"localhost를 사용하여 통신 할 수 있습니다. 이 때문에 포드의 애플리케이션은 포트 사용을 조정해야합니다. 각 포드에는 네트워크를 통해 다른 물리적 컴퓨터 및 포드와 완전히 통신하는 평면 공유 네트워킹 공간에 IP 주소가 있습니다.
kubernetes 문서의 또 다른 부분 :
지금까지이 문서는 컨테이너에 대해 이야기했습니다. 실제로 Kubernetes는 포드 범위에서 IP 주소를 적용합니다. 포드 내의 컨테이너는 IP 주소를 포함하여 네트워크 네임 스페이스를 공유합니다. 이는 Pod 내의 컨테이너가 모두 localhost에서 서로의 포트에 도달 할 수 있음을 의미합니다.
kubectl describe pods <name of pod>
IP를 포함한 몇 가지 정보를 제공합니다.
POD_HOST=$(kubectl get pod $POD_NAME --template={{.status.podIP}})
이 명령은 IP를 반환합니다.
컨테이너의 IP 주소는 네트워크 네임 스페이스 내에서 적절하게 구성되어야 모든 표준 Linux 도구에서이를 얻을 수 있습니다. 예를 들어, 시도를 들어 ifconfig
, ip addr show
, hostname -I
당신의 용기 중 하나에 부착 된 쉘 등을 테스트합니다.
당신은 사용할 수 있습니다
kubectl describe pod `hostname` | grep IP | sed -E 's/IP:[[:space:]]+//'
@mibbit이 제안한 내용을 기반으로합니다.
이것은 다음 사실을 고려합니다.
- 호스트 이름이 POD의 이름으로 설정되어 있지만 나중에 변경 될 수 있습니다.
kubectl
컨테이너에 수동으로 배치되었습니다 (이미지가 빌드되었을 때 가능).- Kubernetes는 클러스터 액세스 / 포드에서 API 액세스 , 즉
/var/run/secrets/kubernetes.io/serviceaccount
컨테이너에 설명 된대로 컨테이너에 서비스 계정 사용자 인증 정보를 암시 적으로 제공합니다.
sed
를 사용 하는 것보다 기억하기가 더 간단 합니다 awk
.
다음은 로컬 컴퓨터에서 실행할 수있는 예입니다.
kubectl describe pod `<podName>` | grep IP | awk '{print $2}'
IP 자체는 출력의 열 2에 있으므로 $2
.
경우에 따라 하향 API에 의존하는 대신 컨테이너 내부에서 프로그래밍 방식으로 로컬 IP 주소 (네트워크 인터페이스에서)를 읽는 것도 작동합니다.
예 : golang : https://stackoverflow.com/a/31551220/6247478
'developer tip' 카테고리의 다른 글
쉼표 천 단위 구분 기호가있는 문자열을 숫자로 구문 분석하려면 어떻게해야합니까? (0) | 2020.10.25 |
---|---|
Symfony2-포함 된 양식 유형에 대한 유효성 검사가 작동하지 않음 (0) | 2020.10.25 |
문자열의 마지막 4자를 얻는 방법? (0) | 2020.10.25 |
Nullable 형식 : C #에서 null 또는 0을 확인하는 가장 좋은 방법 (0) | 2020.10.25 |
varchar에서 마지막 네 문자를 가져 오는 방법은 무엇입니까? (0) | 2020.10.25 |