в некоторых случаях недоступен порт kubernetes Clusterip

#docker #kubernetes

#docker #kubernetes

Вопрос:

я попытался настроить среду dvwa в k8s, я обнаружил, что она не работает как обычно, когда я предоставил доступ к порту модулей dvwa.

я попытался предоставить образец nginx, чтобы убедиться, что мой k8s env работает. И да, nginx хорошо работает на моем локальном компьютере

Вот некоторая информация

 # dvwa.yaml
apiVersion: v1
kind: ReplicationController
metadata:
  name: dvwa
spec:
  replicas: 2
  selector:
    app: dvwa
  template:
    metadata:
      labels:
        app: dvwa
    spec:
      containers:
        - name: dvwa
          image: citizenstig/dvwa:latest
          ports:
          - containerPort: 3306


# dvwa_service.yaml
apiVersion: v1
kind: Service
metadata:
  name: dvwa
spec:
  ports:
  - port: 3306
  selector:
    app: dvwa
  type: NodePort


$ kubectl get svc -o wide
NAME              TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          
AGE     SELECTOR
dvwa              NodePort    10.98.238.130   <none>        
3306:32393/TCP   7m15s   app=dvwa
kubernetes        ClusterIP   10.96.0.1       <none>        443/TCP          
35h     <none>
nginx             NodePort    10.97.143.32    <none>        
80:31961/TCP     5m51s   app=nginx
  

Когда я подключаюсь по ssh к одному из своих компьютеров k8s и набираю curl 10.97.143.32:80 , он возвращает страницу nginx, но curl 10.98.238.130:3306 не работает, изображение docker citizenstig/dvwa содержит 80 и 3306, я также пытался использовать порт 80 в dvwa_service.yaml, но все еще не работает.

Кто-нибудь может мне помочь??? Заранее спасибо!

Ответ №1:

targetPort отсутствует в определении вашего сервиса

Попробуйте приведенное ниже определение службы

 
apiVersion: v1
kind: Service
metadata:
  name: dvwa
spec:
  ports:
  - port: 3306
    targetPort: 3306
  selector:
    app: dvwa
  type: NodePort
  

можете ли вы войти в модуль dvwa и запустить localhost: 3306
получаете ли вы какой-либо ответ?

Комментарии:

1. Спасибо за ответ! я попробовал вышеописанное в моей среде minikube, оно работает, но также без targetPort. Когда я обратился к своим трем узлам env (я использую kubeadm-dind-cluster), описанным в моем вопросе, работает только nginx, что меня действительно смутило…

2. обратитесь к выводам kubectl get svc. номер порта пуст. targetPort требуется для обеспечения привязки сервиса к этому порту в модулях

3. что вы имеете в виду, когда номер порта пуст? Номер порта действительно существует (но в новой строке).. на самом деле в моем модуле nginx также отсутствует targetPort, но он работает..

4. теперь я их вижу.