Одним из лучших способов было бы использовать метод полиморфизма enum :
public class EnumTest {
public enum Foo {
A {
@Override
public Bar getBar() {
return Bar.Alpha;
}
},
B {
@Override
public Bar getBar() {
return Bar.Delta;
}
},
C {
@Override
public Bar getBar() {
return Bar.Alpha;
}
},
;
public abstract Bar getBar();
}
public enum Bar {
Alpha {
@Override
public Foo getFoo() {
return Foo.A;
}
},
Beta {
@Override
public Foo getFoo() {
return Foo.C;
}
},
Delta {
@Override
public Foo getFoo() {
return Foo.C;
}
},
;
public abstract Foo getFoo();
}
public static void main(String[] args) {
for (Foo f : Foo.values()) {
System.out.println(f + " bar " + f.getBar());
}
for (Bar b : Bar.values()) {
System.out.println(b + " foo " + b.getFoo());
}
}
}
Вышеприведенный код выводит желаемый результат:
A bar Alpha
B bar Delta
C bar Alpha
Alpha foo A
Beta foo C
Delta foo C
См. также:
Я вижу две опции, которые можно использовать с k8s:
Используйте istio управление трафиком и создайте DestinationRule
. В настоящее время он поддерживает три режима балансировки нагрузки:
Взвешенный наименьший запрос
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
...
spec:
...
subsets:
- name: test
...
trafficPolicy:
loadBalancer:
simple: ROUND_ROBIN
Использовать lb_type
в прокси посланника с после на k8s. Более подробная информация о после находится в https://www.getambassador.io .
«Внутренняя балансировка нагрузки» между модулями Сервиса уже была рассмотрена в этом вопросе несколько дней назад .
Ingress на самом деле не делает ничего особенного (если только вы не взломали конфигурацию NGINX, которую он использует) - он будет использовать те же правила обслуживания, что и в связанном вопросе.
Если вы хотите или нуждаетесь в детальном управлении маршрутизацией модулей в службе, можно расширить возможности Kubernetes - я рекомендую вам ознакомиться с функциями управления трафиком Istio , так как Одна из его функций - возможность динамически контролировать объем трафика, который получают различные модули в службе.