kubernetes - выставлять контент из образа докера nginx - PullRequest
0 голосов
/ 10 июня 2018

У меня есть изображение контейнера Dogin nginx nha/my-nginx-img.И у меня есть одноузловой кластер kubernetes, установленный на голое железо.Я пытаюсь развернуть и открыть этот контейнер nginx (в противном случае он работает нормально).

Я запустил kubectl apply -f nginx.yaml для этого файла:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-nginx
  labels:
    app: nginx
spec:
  selector:
    matchLabels:
      run: my-nginx
  replicas: 2
  template:
    metadata:
      labels:
        run: my-nginx
    spec:
      containers:
      - name: my-nginx
        image: nha/my-nginx-img
        ports:
        - containerPort: 80
        - containerPort: 443
      imagePullSecrets:
        - name: regcred
#
# Expose Service
#
apiVersion: v1
kind: Service
metadata:
  name: my-nginx
  labels:
    run: my-nginx
spec:
  # I thought using NodePort here 
  # would expose the port on the node?
  type: NodePort
  ports:
  - name: http
    protocol: TCP
    port: 80
    targetPort: 80
  - name: https
    protocol: TCP
    port: 443
    targetPort: 443
  selector:
    run: my-nginx

Я вижу, как они работают:

kubectl get pods -l run=my-nginx -o wide
NAME                        READY     STATUS    RESTARTS   AGE       IP               NODE
my-nginx-5ccbf78584-4lxsn   1/1       Running   0          1d        10.233.102.181   node1
my-nginx-5ccbf78584-6qkml   1/1       Running   0          1d        10.233.102.182   node1

Однако: - IP-адреса, показанные в приведенной выше команде, НЕ являются IP-адресами моей машины - когда я сверну IP-адрес своей машины, я не получаю ответ ни на порт 80, ни на 443

Как мне получить обслуживание этого статического контента от nginx?

Дополнительная информация

kubectl get services дает:

NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                      AGE
kubernetes   ClusterIP   10.233.0.1     <none>        443/TCP                      2d
my-nginx     NodePort    10.233.16.91   <none>        80:31081/TCP,443:31856/TCP   5h

(10.233.16.91 НЕ является моим IP)

И kubectl describe service my-nginx:

Name:                     my-nginx
Namespace:                default
Labels:                   run=my-nginx
Annotations:              kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"run":"my-nginx"},"name":"my-nginx","namespace":"default"},"spec":{"ports":[...
Selector:                 run=my-nginx
Type:                     NodePort
IP:                       10.233.16.91
Port:                     http  80/TCP
TargetPort:               80/TCP
NodePort:                 http  31081/TCP
Endpoints:                10.233.102.181:80,10.233.102.182:80
Port:                     https  443/TCP
TargetPort:               443/TCP
NodePort:                 https  31856/TCP
Endpoints:                10.233.102.181:443,10.233.102.182:443
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

Опять же, я не вижу свой IPгде-нибудь там.

Также я создал кластер, используя kubespray .

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Как мне получить этот статический контент для обслуживания nginx?

Вы создали службу NodePort типа .Используйте <NodeIP>:<NodePort>.В вашем примере http://<NodeIP>:31081, https://<NodeIP>:31856.Также <ClusterIP>:<Port> работает внутри кластера.

Настоятельно рекомендуемые документы: https://kubernetes.io/docs/concepts/services-networking/service/

0 голосов
/ 10 июня 2018

Вам понадобится услуга, а не стручок.Модуль не подвержен ничему, кроме локальной сети kubernetes, поэтому вы создаете службу.

apiVersion: v1
kind: Service
metadata:
  name: my-nginx
  labels:
    run: my-nginx
spec:
  # I thought using NodePort here 
  # would expose the port on the node?
  type: NodePort
  ports:
  - name: http
    protocol: TCP
    port: 80
    targetPort: 80
  - name: https
    protocol: TCP
    port: 443
    targetPort: 443
  selector:
    run: my-nginx

Здесь определяется служба, и она открывает порт на узле, но IP-адрес, который высм. внутренний IP-адрес кластера, к которому могут обращаться только другие модули.

Так что вы можете попробовать kubectl get services

Это покажет вам внешний IP-адрес открываемого порта.

Также проверьте kubectl describe service yourServiceName

...