Невозможно получить доступ к открытому порту на kubernetes - PullRequest
0 голосов
/ 10 января 2019

Я создал собственное изображение tcserver, открывающее порты 80, 8080 и 8443. По сути, у вас есть Apache, и внутри конфигурации у вас есть проход прокси для пересылки его tomcat tcserver.

EXPOSE 80 8080 8443

После этого я создал yaml kubernetes для сборки модуля, открывающего только порт 80.

apiVersion: v1
kind: Pod
metadata:
  name: tcserver
  namespace: default
spec:
  containers:
  - name: tcserver
    image: tcserver-test:v1
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 80

И сервис вместе с ним.

apiVersion: v1
kind: Service
metadata:
  name: tcserver-svc
  labels:
    app: tcserver
spec:
  type: NodePort
  ports:
  - port: 80
    nodePort: 30080
  selector:
    app: tcserver

Но проблема в том, что я не могу получить к нему доступ.
Если я войду в модуль (kubectl exec -it tcserver -- /bin/bash), я смогу сделать curl -k -v http://localhost, и он ответит.

Я полагаю, что я делаю что-то не так с сервисом, но я не знаю, что.
Любая помощь будет оценена.

SVC change
Как предложено sfgroups, я добавил targetPort: 80 в svc, но все еще не работает.

Когда я пытаюсь свернуть IP, я получаю Нет маршрута к хосту

[root@testmaster tcserver]# curl -k -v http://172.30.62.162:30080/
* About to connect() to 172.30.62.162 port 30080 (#0)
*   Trying 172.30.62.162...
* No route to host
* Failed connect to 172.30.62.162:30080; No route to host
* Closing connection 0
curl: (7) Failed connect to 172.30.62.162:30080; No route to host

Это описание из SVC:

[root@testmaster tcserver]# kubectl describe svc tcserver-svc
Name:                   tcserver-svc
Namespace:              default
Labels:                 app=tcserver
Annotations:            <none>
Selector:               app=tcserver
Type:                   NodePort
IP:                     172.30.62.162
Port:                   <unset> 80/TCP
NodePort:               <unset> 30080/TCP
Endpoints:              <none>
Session Affinity:       None
Events:                 <none>

Ответы [ 2 ]

0 голосов
/ 11 января 2019

Когда вы посмотрите на вывод kubectl describe service, вы увидите, что он на самом деле не подключен ни к каким модулям:

Endpoints:              <none>

Это потому, что вы говорите в спецификации сервиса, что сервис будет подключаться к пакетам с меткой с app: tcserver

spec:
  selector:
    app: tcserver

Но в метаданных спецификации модуля вы вообще не указываете метки

metadata:
  name: tcserver
  namespace: default
  # labels: {}

Итак, исправление здесь заключается в добавлении к спецификации модуля соответствующей метки

metadata:
  labels:
    app: tcserver

Также обратите внимание, что на практике развертывание голой капсулы немного необычно. Обычно они заключены в контроллер более высокого уровня, чаще всего в развертывание, которое фактически создает модули. Спецификация развертывания имеет спецификацию шаблонного модуля и имеют значение метки модуля.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: tcserver
  # Labels here are useful, but the service doesn't look for them
spec:
  template:
    metadata:
      labels:
        # These labels are what the service cares about
        app: tcserver
    spec:
      containers: [...]
0 голосов
/ 10 января 2019

Я вижу, что целевой пост отсутствует, можете ли вы добавить порт для проверки и проверить?

apiVersion: v1
kind: Service
metadata:
  name: tcserver-svc
  labels:
    app: tcserver
spec:
  type: NodePort
  ports:
  - port: 80
    nodePort: 30080
    targetPort: 80
  selector:
    app: tcserver
...