Я использую службу Google Container Engine, и у меня есть модуль, на котором запущен сервер, прослушивающий порт 3000. Я настроил службу для подключения порта 80 к порту 3000 этого модуля. Я могу свернуть службу, используя ее локальный и общедоступный IP-адрес из внутри узла, но не снаружи. Я установил правило брандмауэра, чтобы разрешить порт 80 и отправить его на узел, но я продолжаю получать сообщение «В соединении отказано» из-за пределов сети. Я пытаюсь сделать это без правила пересылки, так как есть только один модуль, и похоже, что правила пересылки стоят денег и выполняют балансировку нагрузки. Я думаю, что правило брандмауэра работает, потому что, когда я добавляю createExternalLoadBalancer: true
в спецификацию службы, внешний IP-адрес, созданный правилом переадресации, работает должным образом. Мне нужно что-то еще делать? Проложить маршрут что ли?
controller.yaml
kind: ReplicationController
apiVersion: v1beta3
metadata:
name: app-frontend
labels:
name: app-frontend
app: app
role: frontend
spec:
replicas: 1
selector:
name: app-frontend
template:
metadata:
labels:
name: app-frontend
app: app
role: frontend
spec:
containers:
- name: node-frontend
image: gcr.io/project_id/app-frontend
ports:
- name: app-frontend-port
containerPort: 3000
targetPort: 3000
protocol: TCP
service.yaml
kind: Service
apiVersion: v1beta3
metadata:
name: app-frontend-service
labels:
name: app-frontend-service
app: app
role: frontend
spec:
ports:
- port: 80
targetPort: app-frontend-port
protocol: TCP
publicIPs:
- 123.45.67.89
selector:
name: app-frontend
Изменить (дополнительные сведения): при создании этой службы добавляются эти дополнительные правила, обнаруженные при запуске iptables -L -t nat
Chain KUBE-PORTALS-CONTAINER (1 references)
target prot opt source destination
REDIRECT tcp -- anywhere 10.247.247.206 /* default/app-frontend-service: */ tcp dpt:http redir ports 56859
REDIRECT tcp -- anywhere 89.67.45.123.bc.googleusercontent.com /* default/app-frontend-service: */ tcp dpt:http redir ports 56859
Chain KUBE-PORTALS-HOST (1 references)
target prot opt source destination
DNAT tcp -- anywhere 10.247.247.206 /* default/app-frontend-service: */ tcp dpt:http to:10.241.69.28:56859
DNAT tcp -- anywhere 89.67.45.123.bc.googleusercontent.com /* default/app-frontend-service: */ tcp dpt:http to:10.241.69.28:56859
Я не совсем понимаю iptables, поэтому не уверен, насколько порт назначения соответствует моей службе. Я обнаружил, что DNS для 89.67.45.123.bc.googleusercontent.com
разрешается в 123.45.67.89
.
kubectl get services показывает указанный мной IP-адрес и порт:
NAME IP(S) PORT(S)
app-frontend-service 10.247.243.151 80/TCP
123.45.67.89
В /var/log/kube-proxy.log не отображается ничего недавнего с внешних IP-адресов.