는 Kubernetes - 호스트 네트워크 모드, 실제 시스템의 IP는 포드 지정

생산 환경에서, 내부 용기 (예 인코더와 같은) 일부 애플리케이션은 (예를 들면, 멀티 스트림)로서 물리적 네트워크 수준 자원을 사용할 필요가있다. 이것은 시작 HOST 모드에서 포드는 Kubernetes이 필요합니다. 다음 실험는 Kubernetes-HOST 네트워크 모드, 운영 및 유지 보수 및 몇 가지 제안을 제공합니다.

1, 포드 네트워크

각 포드는 포드 인프라 (또는 PAUSE) 용기, 공유 네트워크의 기준으로 컨테이너를 부팅 기본 설정됩니다. 기타 서비스 컨테이너는 시작 후, 네트워크 모드 "가"네트워크 모드 "로 지정됩니다 소유 :"컨테이너 : pause_containerID을 "이 공유되는 모든 컨테이너 네트워크 포드에서 수행하고, 포드에있는 모든 용기됩니다. 네트워크는이 로컬 주소 (로컬 호스트) 다른 포트 사용자 컨테이너를 통해 액세스 할 수 있습니다 동일합니다.는 Kubernetes 네트워크 모델은 각 포드는 평평한 공유 네임 스페이스 PodIP라는 IP 네트워크를 가지고 있습니다. PodIP, 포드에 의해 네트워크를 통해 다른 물리적 기계 및 컨테이너와 통신 할 수 있습니다.

포드는 네트워크 호스트 모드에 제공 될 수있다, 즉, 분리 네트워크 가상화 않고 직접 네트워크 호스트 컴퓨터. 그 결과, 포드의 모든 용기는 직접 노드에 IP의 PodIP 포드이며, 호스트의 네트워크 환경이 시간을 노출. 원칙적으로, 네트워크는 포드 호스트 설정되면, 포드는 포드 인프라 (또는 PAUSE) 호스트 네트워크 용기에 설정되면, 컨테이너의 네트워크 포인트 포드 내의 다른 용기. 다음과 같이 (65070affecfc61는 서비스 컨테이너, 컨테이너 f60a2ee415e3 포드 인프라입니다) :

[root@k8s-node-3 ~]# docker inspect 65070affecfc6131b2385e5c40d4f21f73c343cc15e7983cdce8594e38ed020f | grep NetworkMode
            "NetworkMode": "container:f60a2ee415e301491f30ffc12855880273da6eded2526a5319eed72a92caef7f",
[root@k8s-node-3 ~]# docker inspect f60a2ee415e301491f30ffc12855880273da6eded2526a5319eed72a92caef7f  | grep NetworkMode
            "NetworkMode": "host",
[root@k8s-node-3 ~]#

2, 샘플을 시작

[root@k8s-master yaml]# cat test-host.yaml 
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: test-host
spec:
  replicas: 4
  template:
    metadata:
      labels: 
        name: test-host
    spec:
      containers:
      - name: test-host
        image: registry:5000/back_demon:1.0
        command:
        - /jboss/jboss-eap-6.1/bin/standalone.sh 
        ports:
        - containerPort: 8080
      hostNetwork: true

3, 운영 및 유지 보수 경험

사본의 3.1 번호

포드는 배포와 호스트 시작 모드, 노드 당 하나가 될 수 있습니다. 즉, 포드 호스트 모드는 "타겟 (nodeSelector 지정되지 않음)을 선택하지 않으면, 선택된 시작 포드 노드를 지칭 카피 수는"타겟 노드 "및"타겟 노드 "의 수보다 클 수 없음 시작 "노드의 수는 사용 가능한 모든 노드 클러스터의 수입니다. 일정이 노드를 스케줄 때문에 카피 수는 "대상 노드"의 수보다 클 경우, 여분의 포드가 보류 상태를 유지합니다, 그것을 찾을 수 없습니다.

다음 예는, 매수가 5로 설정되어 네 개의 클러스터 노드, 상기 상태는 포드가 보류 상태에있다 지속될 것이다.

[root@k8s-master yaml]# kubectl get pod -o wide
NAME                         READY     STATUS    RESTARTS   AGE       IP             NODE
test-host-1108333573-11wbl   1/1       Running   0          17s       10.0.251.153   k8s-node-1
test-host-1108333573-2k35s   1/1       Running   0          17s       10.0.251.146   k8s-node-3
test-host-1108333573-lnlpy   1/1       Running   0          17s       10.0.251.222   k8s-node-4
test-host-1108333573-t6izr   1/1       Running   0          17s       10.0.251.155   k8s-node-2
test-host-1108333573-tf4mc   0/1      Pending   0          17s       <none>         

3.2 PodIP

다음과 같이 PodIP의 포드는 노드의 IP에 있습니다 :

[root@k8s-master yaml]# kubectl get pod -o wide
NAME                         READY     STATUS    RESTARTS   AGE       IP             NODE
test-host-1108333573-11wbl   1/1       Running   0          2h        10.0.251.153   k8s-node-1
test-host-1108333573-2k35s   1/1       Running   0          2h        10.0.251.146   k8s-node-3
test-host-1108333573-lnlpy   1/1       Running   0          2h        10.0.251.222   k8s-node-4
test-host-1108333573-t6izr   1/1       Running   0          2h        10.0.251.155   k8s-node-2

PodIP이 NodeIP이지만, 또한는 Kubernetes에서 가상화 된 네트워크 서비스를 통해 추가 할 수 있지만 사용. 으로는 다음과 같습니다 :

[root@k8s-master yaml]# cat demon1/frontend-service.yaml 
apiVersion: v1
kind: Service
metadata:
  name: frontend-service
  labels:
    name: frontend-service
spec:
  type: NodePort
  ports:
  - port: 8080
    nodePort: 30002
  selector:
    name: frontend-service
[root@k8s-master yaml]# kubectl create -f test-host-svc.yaml 
service "test-host" created
[root@k8s-master yaml]# kubectl describe svc test-host 
Name:            test-host
Namespace:        default
Labels:            name=test-host
Selector:        name=test-host
Type:            NodePort
IP:            10.254.127.198
Port:            <unset>    8080/TCP
NodePort:        <unset>    30003/TCP
Endpoints:        10.0.251.146:8080,10.0.251.153:8080,10.0.251.155:8080 + 1 more...
Session Affinity:    None
No events.

성공적으로 생성 한 후, 가상 네트워크 clusterIP는 클러스터 내에서 응용 프로그램 : 10.254.127.198 : 8080 액세스 백엔드 서비스 (브라우저 등)의 외부 클러스터 응용 프로그램을 할 수 nodeIP + NodePort 액세스 백엔드 서비스에 이르기까지.

3.3 포트 점유

3.3.1 다른 포트는 포드를 점령

같은 클러스터, 호스트 모드 배포 (또는 RC)로 시작하는 경우 containerPort 정의 된 이러한 배치가 같은 값이있는 경우, 다음는 Kubernetes 충돌 포트 리소스를 확인 것, 더 있습니다. 다음 예는 다음과 같다 :

[root@k8s-master yaml]# cat test-host.yaml 
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: test-host
spec:
  replicas: 3
  template:
    metadata:
      labels: 
        name: test-host
    spec:
      containers:
      - name: test-host
        image: registry:5000/back_demon:1.0
        command:
        - /jboss/jboss-eap-6.1/bin/standalone.sh 
        ports:
        - containerPort: 8080
      hostNetwork: true
[root@k8s-master yaml]# cat test-host1.yaml 
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: test-host1
spec:
  replicas: 2
  template:
    metadata:
      labels: 
        name: test-host1
    spec:
      containers:
      - name: test-host1
        image: registry:5000/back_demon:1.0
        command:
        - /jboss/jboss-eap-6.1/bin/standalone.sh 
        ports:
        - containerPort: 8080
      hostNetwork: true
[root@k8s-master yaml]#  kubectl get pod -o wide
NAME                         READY     STATUS    RESTARTS   AGE       IP             NODE
test-host-1108333573-9oo55   1/1       Running   0          19m       10.0.251.155   k8s-node-2
test-host-1108333573-uc2v2   1/1       Running   0          19m       10.0.251.146   k8s-node-3
test-host-1108333573-vxezq   1/1       Running   0          19m       10.0.251.153   k8s-node-1
test-host1-6476903-q8e6o     0/1       Pending   0          19m       <none>         
test-host1-6476903-zmk5l     1/1       Running   0          19m       10.0.251.222   k8s-node-4

실험 클러스터에서 유일한 네 가능한 노드의 수, 두 가지 배포 - 테스트 - 호스트, 외부 노출 금액의 테스트 host1의 포트는 동일 --8080입니다. 두 배포의 총을 시작하려는 복사본의 수는, 그것은 포드의 마지막 시작이 보류 상태에있다 할 것이다, 5입니다.

3.3.2 호스트 포트 점유

배포 호스트 모드 (또는 RC)는 포트를 선언 할 때 프로그램이 아닌 호스트를 제어하는 ​​경우, 예컨대 8080와 같은는 Kubernetes은 포트 8080를, 그렇지는 Kubernetes 확인할 수 있으며, 시간을 점유한다. 즉, 예약 녹화는 포트 정보는 Kubernetes 클러스터를 차지하며, 검사 예약시 관련 작업을 수행. 그러나 일정은 실제 호스트 포트 점유 정보를 확인하지 않습니다. 이것은 실제로 매우 합리적이다, 클러스터 노드는 일반적으로 수만이며, 단순한 자원 단위는 중앙 노드에 의해 결정되는 것을 계산하는 컴퓨팅 파워를 제공으로 처리됩니다. 필요, 노드에서 다른 프로그램을 실행하기 위해 추가 장면에 대한 필요가 없습니다.

네트워크 호스트 모드를 사용하는 경우, (배포 배포 등) 각 응용 프로그램이 항상 원본 서버 9537 및 기타 영원히 고정 고정되어 다른 자신의 고정 포트 및 인코더 9525과 같은 다른 응용 프로그램을 가지고 것을 알 수있다 . 호스트는 Kubernetes 클러스터 노드를 만든 후, 서비스를 제공하기 위해이 비 클러스터 응용 프로그램을 시도하지 않습니다.

3.4 미러링 요구 사항

당신은이 경우에만 포트 미러링을 요구, 단일, 포드 호스트 모드로 시작해야합니다.

일반적으로 포드는 하나의 응용 프로그램이 응용 프로그램만을 공개 한 인터페이스를 넣어야 만 하나의 서비스 메인 거울, 생산 사업에 거울이 될 것입니다. 1) 상기 멀티 캐스트 스트림을 수신하고, 제어는 프로세싱 노드는 포트 9525 점유 2) 8080 점유 시각적 조작 인터페이스 포트를 예를 들어 마스터 노드 인코더 애플리케이션은 두 가지 기능이있다. 멀티 캐스트 스트림이 수신되고, 네트워크 호스트 모드를 사용한다. 두 비즈니스 권고로 분할, 두 가지 배포 배포 배포를 반영. 시작된 호스트 모드를 사용하여, 포트 9525에 고정 된 미러로 분할되는 멀티 캐스트 스트림을 수신하는 단계; 비주얼 인터페이스 분할 거울에, 디폴트는 Kubernetes 네트워크 모드를 시작한다.

게시 된 115 개 원래 기사 · 원 찬양 67 ·은 10 만 + 조회수

추천

출처blog.csdn.net/meifannao789456/article/details/103877109