По умолчанию модули могут обмениваться данными только внутри кластера, поэтому вы не сможете направлять к ним внешний трафик.
Один из способов сделать это - настроить службу как NodePort.Это сопоставит эти порты с портами в диапазоне 30000-32767 для всех узлов.Например:
apiVersion: v1
kind: Service
metadata:
name: teamspeak
labels:
name: teamspeak
spec:
type: NodePort
ports:
- name: 9887-tcp
port: 9887
nodePort: 31694
protocol: TCP
- name: 10011-tcp
port: 10011
nodePort: 30906
protocol: TCP
- name: 30033-tcp
port: 30033
nodePort: 32316
protocol: TCP
selector:
name: teamspeak
Если вы запустите, oc edit service teamspeak
, или как называется служба вашего приложения, и измените тип на NodePort, Openshift автоматически назначит порт в указанном выше диапазоне.
После того, как ваша служба настроена как NodePort, вам нужно будет перенаправить запросы для этих портов на новые, которые были назначены Openshift (порты диапазона 30000 - 32767), поэтому вместо запросов, идущих на 9887, они идутдо 30036, в случае нашего примера.
Ссылка: https://docs.openshift.com/container-platform/3.6/dev_guide/expose_service/expose_internal_ip_nodeport.html
В качестве альтернативы, вы можете определить сервис как тип LoadBalancer
, который будет не только выставлять ваши модули на внешний трафик, но также распределять запросы между модулями в соответствии с вашей конфигурацией.Например,
apiVersion: v1
kind: Service
metadata:
name: egress-2
spec:
ports:
- name: db
port: 3306
- name: additional-port
port: 9887
- name: another-one
port: 10011
loadBalancerIP:
type: LoadBalancer
selector:
name: mysql
Ссылка: https://docs.openshift.com/container-platform/3.4/dev_guide/expose_service/expose_internal_ip_load_balancer.html