2017-10-13 15 views
5

Tôi đã triển khai hai POD-s với hostnetwork được đặt thành true. Khi POD-s được triển khai trên cùng một nút OpenShfit thì mọi thứ hoạt động tốt vì chúng có thể phát hiện lẫn nhau bằng cách sử dụng nút IP.OpenShift và hostnetwork = true

Khi POD-s được triển khai trên các nút OpenShift khác nhau thì chúng không thể phát hiện ra nhau, tôi không có tuyến để lưu trữ nếu tôi muốn trỏ POD này đến POD khác bằng nút IP. Làm thế nào để sửa lỗi này?

+0

Tại sao bạn cần thiết lập hostnetwork thành true ngay từ đầu? Bất kỳ nhóm nào trong cùng một dự án sẽ có thể nói chuyện với bất kỳ nhóm nào khác trong cùng một dự án theo mặc định, ngay cả khi trên các nút khác nhau. Điều này là do mỗi nhóm có địa chỉ IP riêng và quyền truy cập của nó sẽ được thiết lập để cho phép kết nối. –

+0

Bạn thực sự không nên sử dụng IP nút làm cơ chế địa chỉ cho các nhóm khác. Sử dụng tên của nhóm làm tên máy chủ hoặc vẫn sử dụng tên dịch vụ làm tên máy chủ và tin cậy định tuyến nội bộ để gửi tên đó tới một trong các nhóm cho dịch vụ đó. IOW, không cần phải sử dụng IP anyway vì có một DNS nội bộ ánh xạ các tên pod và tên dịch vụ cho các IP cho bạn. –

+0

@Graham Dumpleton Tôi cần sử dụng hostnetwork cho thiết lập cụm REDIS. REDIS yêu cầu nó để làm việc trên Docker. Thats những gì họ nhà nước trong tài liệu chính thức của cụm REDIS. – dplesa

Trả lời

0

Nếu bạn muốn hai thùng chứa được chia sẻ cùng một máy vật lý và tận dụng lợi thế của loopback để liên lạc nhanh, thì tốt hơn bạn nên định nghĩa chúng với nhau thành một Pod đơn với hai container.

Nếu hai container có nghĩa là trôi nổi trên một cụm lớn hơn và được kết hợp lỏng lẻo hơn, thì tôi khuyên bạn nên tận dụng lợi thế của dịch vụ xây dựng trong Kubernetes (dưới OpenShift) và sử dụng nó cho phát hiện thích hợp.

Dịch vụ được ghi nhận tại https://kubernetes.io/docs/concepts/services-networking/service/, và cùng với một dịch vụ DNS nội bộ (nếu được thực hiện - phổ biến ở Kubernetes 1.4 và mới hơn) mà họ cung cấp một phương tiện để cho Kubernetes quản lý nơi mà mọi thứ là, cập nhật một mục DNS nội bộ theo hình thức <servicename>.<namespace>.svc.cluster.local . Vì vậy, ví dụ, nếu bạn thiết lập một Pod với một dịch vụ có tên là "backend" trong không gian tên mặc định, Pod còn lại có thể tham chiếu nó là backend.default.svc.cluster.local. Tài liệu Kubernetes về phần DNS này có sẵn tại https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/

Điều này cũng tránh được biến chứng "hostnetwork = true" và cho phép OpenShift (hoặc Kubernetes) quản lý mạng.

+0

Thật không may, như tôi đã giải thích trong một bình luận ở trên, tôi phải sử dụng mạng chủ. Đó là giới hạn của ứng dụng mà tôi đang triển khai trên OpenShift. – dplesa

+0

Tôi không biết ứng dụng là gì (rõ ràng), nhưng nếu nó yêu cầu hostnetwork = true thì việc triển khai trong Kubernetes/OpenShift có thể là một lựa chọn tồi. Chúng hỗ trợ một sự trừu tượng để giữ hai thùng chứa được kết hợp chặt chẽ (mạng và lưu trữ khôn ngoan) với khái niệm "N-containers per Pod", nhưng nếu không thì mạng sẽ được trừu tượng hóa đáng kể hơn ứng dụng này có thể cho phép. – heckj

Các vấn đề liên quan