Kubernetes Service NodePort не подключен - PullRequest
1 голос
/ 28 марта 2020

Я использую миникуб на windows 10. И я создаю kubernetes NodePort Service для доступа из клиентского веб-браузера. Сначала приведенные ниже коды представляют собой файл конфигурации ресурсов.

apiVersion: v1
kind: Pod
metadata:
  name: blog-system 
  labels:
    app: blog-pod 
spec:
  containers:
  - name: blog-app
    image: app:latest 
    imagePullPolicy: Never 
    ports:
      - containerPort: 8080
    args: ["-t", "-i"]
  - name: blog-mysql
    image: mysql:latest 
    env:
      - name: MYSQL_ROOT_PASSWORD
        value: password
      - name: MYSQL_PASSWORD
        value: password
      - name: MYSQL_DATABASE
        value: test
    ports:
      - containerPort: 3306

---
apiVersion: v1
kind: Service
metadata:
  name: blog-app-svc
spec:
  type: NodePort   
  selector:
    app: blog-pod  
  ports:
  - name: http
    port: 8080
    protocol: TCP
    targetPort: 80
    nodePort: 31000

Подушки и службы Kubernetes созданы успешно.

> kubectl get services
NAME           TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
blog-app-svc   NodePort    10.100.32.119   <none>        8080:31000/TCP   79s
kubernetes     ClusterIP   10.96.0.1       <none>        443/TCP          5m54s

> minikube service blog-app-svc --url
http://192.168.5.25:31000

Однако доступ к этой службе нодпорта kubernetes отклонен даже при всех эти URL.

http://10.100.32.119:31000
http://10.100.32.119:8080
http://192.168.5.25:31000

Я понятия не имею, где ошибки в файле конфигурации ресурсов, служебной части или части модуля. Любая идея, пожалуйста.

Ответы [ 2 ]

2 голосов
/ 28 марта 2020

targetPort вашей службы не соответствует containerPort вашего Pod.

В вашей декларации службы указано, что nodePort 31000 на любом узле в кластере или port 8080 на специальное имя хоста blog-app-svc.default.svc.cluster.local в кластере, пересылаемое на targetPort 80 в некотором модуле с меткой app: blog-pod. У вас есть этот модуль, но он слушает порты 8080 и 3306, а не порт 80.

Если вы поменяете местами port и targetPort, то стандартный HTTP-порт 80 на Сервисе перенаправит на порт 8080 в вашем стручок, который, вероятно, то, что вы ищете.

0 голосов
/ 28 марта 2020

Похоже, что конфигурация верна для вашего NodePort. Некоторые советы по устранению неполадок: вероятно, это вызвано тем, что на рабочем узле Kubernetes работает брандмауэр.

Итак, убедитесь, что открыт 31000, и вы сможете разрешить этот IP-адрес с сервера Kubernetes API.

Во-вторых, вам нужно добавить контроллер LoadBalancer в ваш кластер, чтобы вам не приходилось использовать NodePorts. Они на самом деле не используются ни для чего, кроме отладки.

...