Расширение службы для каждого модуля на несколько портов в metacontroller (kubernetes)

# #kubernetes #google-kubernetes-engine #kubernetes-helm #azure-aks #kubernetes-pod

Вопрос:

Я создал сервис для каждого модуля для набора состояний, и он работает для одного порта (80/tcp). Однако мне нужно использовать его для нескольких портов (например, 80/tcp, 30000/udp и т. Д.).

Как я могу распространить это на несколько портов в метаконтроллере service-per-pod?

служба синхронизации для каждого модуля.jsonnet — изображение

Комментарии:

1. Вы пробовали что-то вроде github.com/metacontroller/metacontroller/blob/master/examples/… в вашей аннотации?

2. Нет, но нужен пример на основе jsonnet для нескольких портов в метаконтроллере i.stack.imgur.com/OvNXX.png

Ответ №1:

Пример службы для каждого модуля фактически показывает, как это сделать в manifest/sync-service-per-pod.jsonnet.

service-per-pod-ports Аннотация позволяет указать разделенный запятыми набор портов, которые будут доступны сгенерированной службой:

 service-per-pod-ports: "80:80,8080:8080"
 

Затем в sync-service-per-pod.jsonnet :

Получите порты

 local ports = statefulset.metadata.annotations["service-per-pod-ports"]
 

А затем пролистайте их, создав несколько ports в спецификации службы:

    ports: [
      {
        local parts = std.split(portnums, ":"),
        name: "port-"   std.parseInt(parts[0]),
        port: std.parseInt(parts[0]),
        targetPort: std.parseInt(parts[1]),
      }
      for portnums in std.split(ports, ",")
    ]
 

Обратите внимание на for portnums in std.split(ports, ",") итерации по ports набору выше.

Похоже, вы пытаетесь сделать что-то более динамичное, так что вы могли бы сделать что-то вроде:

 for index in std.range(1,N) 
 

где N — максимальное значение индекса.

Комментарии:

1. Как передать комбинацию протоколов, таких как 80:8080/tcp и 81:8080/udp ?