Kubernetes - Невозможно получить доступ к Apache Pod от прокси - PullRequest
0 голосов
/ 08 марта 2019

У меня есть приложение PHP + Apache на POD в Kubernetes. Приложение PHP, доступ к API-интерфейсу Elasticsearch через порт 9200 и просмотр простого веб-сайта для пользователей через порт 5000.

Я запускаю прокси, используя kubectl proxy --address='0.0.0.0' --port=8001 --accept-hosts='.*'.

Когда я вхожу в "http://localhost:8001/api/v1/namespaces/default/pods/website/proxy/", я вижу следующую ошибку:

Error: 'dial tcp 172.17.0.6:5000: connect: connection refused'
Trying to reach: 'http://172.17.0.6:5000/'

* 172.17.0.6 - это IP-адрес POD.

Это веб-сайт POD yaml:

apiVersion: v1
kind: Pod
metadata:
  name: website
  labels:
    app: website
spec:
  containers:
  - name: website
    image: website_k8s:latest
    ports:
    - containerPort: 5000
    - containerPort: 80

Это докер-файл website_k8s: последний:

FROM php:7.0-apache
RUN echo "ServerName 0.0.0.0" >> /etc/apache2/apache2.conf
COPY ./index.php /var/www/html/
EXPOSE 5000

Я также пытался запустить службу:

apiVersion: v1
kind: Service
metadata:
  name: website-service
spec:
  ports:
  - port: 5000
    targetPort: 80
    protocol: TCP
    name: serving
  - port: 80
    targetPort: 9200
    protocol: TCP
    name: readfromelasticsearch
  selector:
    app: website

И когда я вхожу в http://localhost:8001/api/v1/namespaces/default/services/website-service/proxy/, я вижу:

{
  "kind": "Status",
  "apiVersion": "v1",
  "metadata": {

  },
  "status": "Failure",
  "message": "no endpoints available for service \"website-service\"",
  "reason": "ServiceUnavailable",
  "code": 503
}

Хотя, когда я запускаю $kubectl get endpoints website-service, я вижу:

NAME              ENDPOINTS                       AGE
website-service   172.17.0.6:80,172.17.0.6:9200   59m

Я вижу конечную точку POD службы.

Как я могу получить доступ к своему веб-сайту через прокси?

1 Ответ

2 голосов
/ 09 марта 2019

Проблема в том, что Apache прослушивает порт 80, а не 5000.

Если вы удалите containerPort: 5000, то вы сможете получить доступ к сайту через http://localhost:8001/api/v1/namespaces/default/pods/website/proxy/.

Во-вторых, конечные точкивы видите для службы являются внутренними по отношению к кластеру.Таким образом, вы можете получить доступ к услуге через эти конечные IP-точки из пакета: kubectl exec website -- curl 172.17.0.6/.Если вы хотите предоставить свою службу извне, она должна иметь тип NodePort или LoadBalancer.

Наконец, проблема, с которой вы сталкиваетесь при запросе службы через прокси-сервер, заключается в том, что при указании именик порту, вы должны включить его в вызов прокси: curl localhost:8001/api/v1/namespaces/default/services/website-service:serving/proxy/.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...