2017-03-03 3 views
0

: (하지 GCE 또는 AWS와 같은 클라우드 제공자에) 클러스터는 우리 자신의 베어 메탈 시스템에서 실행되는Kubernetes 서비스에 여러 서브넷의 베어 메탈에 고정 주소를 지정하는 방법은 무엇입니까? 나는 다음과 같은 특성을 가진는 Kubernetes 배포하고 있어요

  • 작업자 기계가 여러 걸쳐 단지 마치에 예약 할에

    • 핀 특정 서비스 : 서브넷 보안상의 이유로

    , 우리는 다음을 수행 싶습니다 특정 서브넷의 nes (이 방법은 이미 간단합니다.)

  • 다른 서브넷에서 실행되는 서비스로부터 통신을 수락해야하는 서비스의 경우 주소 (IP, 포트 또는 둘 다). 그런 다음 라우터의 ACL을 정적으로 구성하여 이러한 통신 만 허용하십시오.

나는 몇 가지 접근법을 제안했지만, 내가 알 수있는 한, 그들은 모두 어떤 식 으로든 부족하다. 그들은 다음과 같습니다 :

  • LoadBalancer을 사용하십시오. LoadBalancers는 현재 GCE 또는 AWS로드 밸런서 만 지원하기 때문에 작동하지 않습니다.
  • NodePorts을 사용하십시오. 내가 말할 수있는 한 Kubernetes에게 특정 기계 서브 세트 (이 경우 서비스와 동일한 서브넷에있는 시스템) 만 갖도록 지시 할 방법이 없기 때문에이 포트에서 수신하고 트래픽을 서비스 (모든 서브넷에있는 모든 컴퓨터가 수신 및 전달 트래픽을 사용할 수없는 이유는 서비스 인스턴스가 예약 될 IP 주소/포트를 미리 알 수 없기 때문에 정적으로 구성 할 수 없기 때문입니다 라우터의 ACL).
  • External IPs을 사용하십시오. 이는 아마도 실행 가능한 서비스와 가장 비슷하지만 해당 서브넷 외부 서비스와의 연결을 허용해야하는 특정 서브넷의 서비스 수가 서브넷의 IP 수보다 많지 않아야합니다.

이 문제를 해결하는 다른 방법이 있습니까? 이 문제를 해결하는 커스텀 소프트웨어를 작성하는 것은 선택 사항이지만 가능하다면 피하고 싶습니다.

+0

"_How이는 Kubernetes 서비스를 여러 서브넷에서 베어 메탈에 고정 주소를 부여하기 _?"정말 이해가되지 않습니다 질문을. 주소는 하나의 네트워크에만 있고 복수의 네트워크에는 없습니다. 네트워크마다 다른 주소를 할당해야합니다. –

답변

0

서비스 용 고정 외부 포트가있는 NodePort을 사용하고 ACL을 사용하여 원하는 노드, 특히 IE의 서브넷에 대한 액세스를 제한 할 수 있습니다. 고정 NodePort에 대한

예 :

apiVersion: v1 
kind: Service 
metadata: 
    name: nginx 
    labels: 
    name: nginx 
spec: 
    type: NodePort 
    ports: 
    - port: 80 
     nodePort: 30080 
     name: http 
    - port: 443 
     nodePort: 30443 
     name: https 
    selector: 
    name: nginx 
+0

특정 서브넷의 노드 만 주어진'NodePort'에서 수신 대기 할 수 있습니까? 또는 단순히 ACL이 다른 서브넷의 노드에서 해당 포트에 대한 액세스를 차단하도록하는 것입니까? – joshlf

+0

아니요, 이것은 kubernetes에게 임의의 포트 대신 30080 및 30443을 사용하도록 지시하므로 ACL을 사용하여 원하지 않는 노드를 차단할 수 있습니다. –