Địa chỉ IP công cộng cho container LXC


26

Ok, vì vậy tôi muốn biết làm thế nào để kết nối mạng trên các container LXC. Không chỉ là loại thông tin mơ hồ bạn nhận được từ các trang web khác, mà là hướng dẫn thực sự cho người mới bắt đầu để làm cho chúng hoạt động .. Vì hầu hết các ví dụ về cơ bản được thiết lập để mọi người thử nghiệm, tôi muốn chạy một dịch vụ trên một ... như một máy chủ web chẳng hạn.

Tôi đang chạy Ubuntu 12.04 LTS và tôi đã cài đặt LXC và tôi có thể thực hiện, bắt đầu và dừng một container. Máy chủ của tôi rõ ràng có IP đối diện công khai và tôi muốn biết cách thiết lập một container để nó cũng có thể có IP công khai. Vì dường như đã có một cây cầu thay thế từ thùng chứa hiện tại của tôi, có vẻ như tôi cần phải cung cấp cho các vùng chứa một phạm vi DHCP công khai để chúng hoạt động hoặc gán địa chỉ IP tĩnh cho vùng chứa của tôi.

Nếu tôi muốn gán IP tĩnh cho container, tôi phải làm thế nào? Tôi có cần thực hiện bất kỳ thay đổi nào đối với cấu hình cầu của tôi trên máy chủ không? Có thực sự tốt hơn để làm điều đó với tùy chọn MACVlan?

Bất kỳ trợ giúp sẽ được đánh giá cao.


Tôi không quen thuộc với LXC, nhưng isp thông thường của bạn sẽ chỉ cung cấp cho bạn một địa chỉ IP công cộng. Bạn có một gói với nhiều ips tĩnh?
wlraider70

IP đối mặt công khai không phải là trường hợp sử dụng duy nhất, chúng tôi muốn 2 IP công cộng được gán cho bộ chứa cân bằng tải của chúng tôi, nhưng chúng tôi muốn IP LAN chuyên dụng dành riêng cho nhiều dịch vụ khác. Theo cách đó, nếu chúng ta di chuyển các container xung quanh trên các phần cứng khác nhau thì việc di chuyển IP sẽ dễ dàng (DNS không hoạt động đối với một số thành phần chúng ta sử dụng)
David

Câu trả lời:


23

Cách tiếp cận của tôi giả định rằng máy chủ của bạn có một NIC duy nhất và bạn cần chia sẻ NIC đó giữa máy chủ và khách LXC. Điều này liên quan đến việc sử dụng một cây cầu. Cây cầu sở hữu và quản lý eth0. Các máy chủ bây giờ cấu hình mạng riêng của nó trên br0thay vì eth0. Các khách LXC được cấu hình để kết nối với cây cầu.

  1. Trên máy chủ , sudo apt-get install bridge-utils.

  2. Trên máy chủ, thay thế eth0bằng một cây cầu:

    Điều này nguy hiểm. Nhận sai điều này và bạn có thể bị khóa khỏi máy chủ của bạn. Hãy chắc chắn để kích hoạt đăng nhập cục bộ và truy cập bảng điều khiển cục bộ hoạt động, để bạn có thể hoàn nguyên thay đổi này nếu bạn gặp bất kỳ vấn đề nào.

    Trong /etc/network/interfaces:

    1. Thay thế auto eth0bằng auto br0.
    2. Thay thế:

      iface eth0 inet dhcp
      

      với:

      iface br0 inet dhcp
          bridge_ports eth0
      

      Nếu bạn có cấu hình mạng tĩnh, thì bạn sẽ thay thế:

      iface eth0 inet static
          address ...
          netmask ...
          gateway ...
          etc.
      

      với:

      iface br0 inet static
          bridge_ports eth0
          address ...
          netmask ...
          gateway ...
          etc.
      

      Bạn chỉ cần thay đổi eth0cho br0và thêm các bridge_ports eth0dòng.

    3. Khởi động lại máy chủ. Nếu bạn đang làm điều này cục bộ, sau đó chạy sudo ifdown eth0trước khi bạn bắt đầu, và sudo ifup br0sau đó cũng sẽ làm. Lưu ý rằng cây cầu có thể mất một ít thời gian để đi lên, vì vậy hãy cho nó năm phút sau khi khởi động lại trước khi bạn cho rằng tất cả đã mất.

  3. Để di chuyển một container LXC đã cho có tên sang IP công cộng:

    1. Dừng container.
    2. Trên máy chủ, chỉnh sửa và thay đổi thành ./var/lib/lxc/container_name/configlxc.network.linkbr0
    3. Trên máy chủ, chỉnh sửa và định cấu hình IP công khai của bạn như bình thường (DHCP hoặc cấu hình tĩnh khi cần). Lưu ý rằng giao diện vẫn được gọi từ quan điểm của container./var/lib/lxc/container_name/rootfs/etc/network/interfaceseth0
    4. Khởi động lại container.
  4. Để thay đổi mặc định cho các thùng chứa LXC mới, hãy chỉnh sửa /etc/lxc/default.conftrên máy chủ và thay đổi lxc.network.linkthành br0.

  5. Nếu bạn không cần cầu NAT do LXC cung cấp (ví dụ: tất cả các container của bạn sẽ sử dụng cầu mới thay thế), sau đó trên máy chủ chỉnh sửa /etc/default/lxcvà thay đổi USE_LXC_BRIDGEthành "false", sau đó trên máy chủ chạy sudo service lxc restart.


Cảm ơn! Có rất nhiều câu hỏi tương tự xung quanh. Nhưng, câu trả lời này cuối cùng đã giúp tôi làm việc.
Mausy5043

1

Robie, cảm ơn bạn rất nhiều vì đã đăng câu trả lời này, tôi đã hất tóc ra để cố gắng thực hiện điều này và đây là phương pháp duy nhất có hiệu quả!

Tôi nghĩ rằng tôi nên đề cập đến một vài điều tôi đã tìm ra để giúp làm rõ các hướng dẫn cho các quản trị viên khác.

Máy chủ của tôi có nhiều bí danh ip tĩnh được gán cho eth0 trên máy khách, ví dụ:

iface eth0:1 inet static
  address 5.5.5.5
  netmask 255.255.255.5
  gateway 5.5.5.1
etc.

Bây giờ chúng tôi không muốn thiết lập br0 theo cùng một cách, chúng tôi chỉ muốn một IP không có bí danh như Robie đã chỉ ra ở trên.

Vì vậy, giả sử bạn muốn 5.5.5.5 được gán cho container debian8.

Chỉnh sửa /var/lib/lxc/debian8/etc/network/interfacesvà thêm:

iface eth0 inet static 
      address 5.5.5.5
      netmask 255.255.255.5
      gateway 5.5.5.1
    etc.

Sau đó ban hành lệnh này: route add default gw <gateway-ip, in my case 5.5.5.1>

Sau đó, khởi động lại container và mọi thứ cuối cùng sẽ hoạt động! :)


1

Tôi đã có cùng một vấn đề và tôi có giải pháp này (nhanh và bẩn).

server: eth0 = 10.1.0.77/24
server: lxdbr0 (lxd bridge) = 10.255.255.77/24

container: eth0 = 10.255.255.100/24 (same network as lxdbr0)
container: eth0:0 = 194.99.99.99/28  (public ip address on eth0 alias)

Trên máy chủ: route add -host 194.99.99.99 gw 10.255.255.100 dev lxdbr0

Ngoài ra, nếu cần thêm tuyến đường đến các bộ định tuyến ngược dòng.

Có lẽ, không phải là giải pháp tốt nhất nhưng không đòi hỏi nỗ lực lớn! Chúc mừng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.