Điểm:1

Làm cách nào để đưa lưu lượng truy cập vào danh sách trắng với NetworkPolicy không ngăn Apache Ignite khởi động?

lá cờ ru

Tôi có một số kiến ​​trúc microservice ít nhiều phức tạp, trong đó Apache Ignite được sử dụng làm cơ sở dữ liệu/bộ đệm không trạng thái. Đánh lửa vỏ là duy nhất vỏ trong nó không gian tên và kiến ​​trúc phải vượt qua kiểm tra bảo mật, nó sẽ không vượt qua nếu tôi không áp dụng các biện pháp hạn chế nhất Chính sách mạng có thể cho đi ra giao thông đường bộ. Nó phải hạn chế tất cả lưu lượng truy cập có thể không cần thiết bởi chính Ignite.

Lúc đầu, tôi nghĩ: Tốt, Ignite không đẩy bất kỳ lưu lượng truy cập nào sang người khác vỏs (không có nhóm nào khác trong đó không gian tên), vì vậy điều này sẽ dễ dàng thực hiện khi hạn chế tất cả đi ra giao thông trong không gian tên nơi Ignite là duy nhất vỏ! ...

Chà, điều đó không thực sự diễn ra tốt đẹp:
Không tí nào đi ra quy tắc, ngay cả khi tôi cho phép lưu lượng truy cập vào tất cả các cổng được đề cập trong Tài liệu Ignite, sẽ khiến khởi động không thành công với lỗi Đốt cháySpiException điều đó nói Không thể truy xuất địa chỉ IP nhóm Ignite, Gây ra bởi: java.net.ConnectException: Thao tác đã hết thời gian (Đã hết thời gian kết nối).

Vấn đề dường như là TcpDiscoveryKubernetsIp Downloader, đặc biệt là phương pháp getRegisteredAddresses(...) mà rõ ràng là có một số lưu lượng đi ra bên trong không gian tên để đăng ký địa chỉ IP của các nút Ignite. Tất nhiên, cổng disory 47500 được cho phép, nhưng điều đó không thay đổi được tình hình. Các chức năng của Ignite với khác vỏs từ khác không gian têns đang hoạt động mà không có đi ra các quy tắc được áp dụng, có nghĩa là (với tôi) rằng cấu hình liên quan đến CụmVai trò, CụmVai tròRàng buộc, một Dịch vụ bên trong không gian tên và cấu hình xml của chính Ignite, v.v. có vẻ đúng. Thậm chí xâm nhập các quy tắc hạn chế lưu lượng truy cập từ các không gian tên khác đang hoạt động như mong đợi, cho phép chính xác lưu lượng truy cập mong muốn.

Đây là những chính sách tôi đã áp dụng:

[ĐANG LÀM VIỆC, chỉ chặn lưu lượng truy cập không mong muốn]:

## Từ chối tất cả lưu lượng truy cập vào tất cả các Nhóm trong Không gian tên
apiVersion: mạng.k8s.io/v1
loại: NetworkPolicy
metadata:
  tên: từ chối-tất cả-ingress-in-cache-ns
  không gian tên: cache-ns
thông số kỹ thuật:
  # không chọn gì ở đây sẽ từ chối tất cả lưu lượng truy cập giữa các nhóm trong không gian tên
  podSelector:
    matchLabels: {}
  # các tuyến giao thông được xem xét, tại đây: độc quyền đến
  loại chính sách:
    - Xâm nhập
## Cho phép lưu lượng truy cập cần thiết
apiVersion: mạng.k8s.io/v1
loại: NetworkPolicy
metadata:
  tên: netpol-cache-ns
  không gian tên: cache-ns
# xác định (các) nhóm mà chính sách này đang nhắm mục tiêu
thông số kỹ thuật:
  loại chính sách:
    - Xâm nhập
  podSelector:
    trận đấuNhãn:
      ứng dụng: đốt cháy
  # <----lưu lượng truy cập đến----
  xâm nhập:
    - từ:
      - không gian tênSelector:
          trận đấuNhãn:
            khu vực: nơi khác
        podSelector:
          matchExpressions:
            - phím: ứng dụng
              toán tử: Trong
              giá trị: [some-pod, another-pod] # tên giả, những Pod này không thành vấn đề gì cả
      cổng:
        - cổng: 11211 # JDBC
          giao thức: TCP
        - cổng: 47100# giao tiếp SPI
          giao thức: TCP
        - cổng: 47500 # Khám phá SPI (TIÊU CHUẨN, rất có thể ...)
          giao thức: TCP
        - cổng: 10800 # SQL
          giao thức: TCP
# ---- lưu lượng gửi đi ---->
# KHÔNG CÓ TẤT CẢ

Với hai điều này được áp dụng, mọi thứ đều hoạt động tốt, nhưng kiểm tra bảo mật sẽ nói điều gì đó như
Đâu là những hạn chế cho đi ra? Điều gì sẽ xảy ra nếu nút này bị tấn công thông qua các tuyến được phép vì một trong các Nhóm sử dụng các tuyến này đã bị tấn công trước đó? Nó có thể gọi một máy chủ C&C sau đó! Cấu hình này sẽ không được phép, hãy làm cứng kiến ​​trúc của bạn!

[CHẶN lưu lượng truy cập mong muốn/cần thiết]:

Nói chung từ chối tất cả lưu lượng truy cập ...

## Từ chối tất cả lưu lượng truy cập vào tất cả các Nhóm trong Không gian tên
apiVersion: mạng.k8s.io/v1
loại: NetworkPolicy
metadata:
  tên: từ chối tất cả lưu lượng truy cập trong bộ đệm-ns
  không gian tên: cache-ns
thông số kỹ thuật:
  # không chọn gì ở đây sẽ từ chối tất cả lưu lượng truy cập giữa các nhóm trong không gian tên
  podSelector:
    matchLabels: {}
  # các tuyến giao thông được xem xét, tại đây: độc quyền đến
  loại chính sách:
    - Xâm nhập
    - Egress # <------ ĐÂY LÀ SỰ KHÁC BIỆT SO VỚI CÔNG VIỆC TRÊN

... và cho phép các tuyến đường cụ thể sau đó

apiVersion: mạng.k8s.io/v1
loại: NetworkPolicy
metadata:
  tên: netpol-cache-ns-egress
  không gian tên: cache-ns
# xác định (các) nhóm mà chính sách này đang nhắm mục tiêu
thông số kỹ thuật:
  loại chính sách:
    - Đi ra
  podSelector:
    trận đấuNhãn:
      ứng dụng: đốt cháy
  ---- lưu lượng đi ---->
  đi ra:
    # [KHÔNG ĐỦ]
    # cho phép đi ra không gian tên này tại các cổng cụ thể
    - đến:
      - không gian tênSelector:
          trận đấuNhãn:
            vùng: vùng đệm
      cổng:
        - giao thức: TCP
          cổng: 10800
        - giao thức: TCP
          cổng: 47100 # giao tiếp SPI
        - giao thức: TCP
          cổng: 47500
    # [KHÔNG ĐỦ]
    # cho phép phân giải dns nói chung (không giới hạn không gian tên hoặc nhóm)
    - cổng:
      - giao thức: TCP
        cổng: 53
      - giao thức: UDP
        cổng: 53
    # [KHÔNG ĐỦ]
    # cho phép đi ra hệ thống kube (đã có nhãn!)
    - đến:
      - không gian tênSelector:
          trận đấuNhãn:
            vùng: hệ thống kube
    # [KHÔNG ĐỦ]
    # cho phép đi ra trong không gian tên này và cho nhóm đánh lửa
    - đến:
      - không gian tênSelector:
          trận đấuNhãn:
            vùng: vùng đệm
        podSelector:
          trận đấuNhãn:
            ứng dụng: đốt cháy
    # [KHÔNG ĐỦ]
    # cho phép lưu lượng truy cập đến địa chỉ IP của nhóm đánh lửa
    - đến:
      - ipBlock:
          cidr: 172.21.70.49/32 # sẽ không hoạt động tốt vì các địa chỉ đó là địa chỉ động
      cổng:
        - cổng: 11211 # JDBC
          giao thức: TCP
        - cổng: 47100# giao tiếp SPI
          giao thức: TCP
        - cổng: 47500 # Khám phá SPI (TIÊU CHUẨN, rất có thể ...)
          giao thức: TCP
        - cổng: 49112 # JMX
          giao thức: TCP
        - cổng: 10800 # SQL
          giao thức: TCP
        - cổng: 8080 # REST
          giao thức: TCP
        - cổng: 10900 # máy khách mỏng
          giao thức: TCP

Phiên bản Apache Ignite được sử dụng là 2.10.0

Bây giờ câu hỏi cho tất cả độc giả là:

Làm thế nào tôi có thể hạn chế Đi ra đến mức tối thiểu tuyệt đối bên trong không gian tên để Ignite khởi động và hoạt động chính xác? Liệu nó có đủ để chỉ từ chối Đi ra ra ngoài cụm?

Nếu bạn cần thêm khoai mỡĐối với một phỏng đoán hoặc gợi ý có giáo dục, xin vui lòng yêu cầu họ trong một nhận xét.
Và xin lỗi vì đã gắn thẻ nếu nó có vẻ không phù hợp, tôi không thể tìm thấy thẻ kubernetes-networkpolicy vì nó hiện diện trên stackoverflow.

CẬP NHẬT:

thi hành nslookup -debug kubernetes.default.svc.cluster.local từ bên trong nhóm đánh lửa mà không có bất kỳ chính sách nào hạn chế đi ra trình diễn

BusyBox v1.29.3 (24/01/2019 07:45:07 UTC) nhị phân đa cuộc gọi.

Cách sử dụng: nslookup HOST [DNS_SERVER]

Truy vấn DNS về HOST

Ngay khi (bất kỳ) Chính sách mạng được áp dụng hạn chế Đi ra đến các cổng, nhóm và không gian tên cụ thể, nhóm Ignite từ chối khởi động và tra cứu không đến được kubernetes.default.svc.cluster.local nữa không.

Đi ra đến DNS đã được cho phép (UDP 53 đến ứng dụng k8s: kube-dns) â vẫn không thể tra cứu ip

Mikołaj Głodziak avatar
lá cờ id
Bạn đã sử dụng phiên bản Kubernetes nào và bạn đã thiết lập cụm như thế nào? Bạn đã sử dụng cài đặt kim loại trần hoặc một số nhà cung cấp đám mây?
deHaar avatar
lá cờ ru
Nhà cung cấp dịch vụ đám mây và tôi hiện đang cập nhật cụm và công nhân lên 1.21

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.