k8s nodeport的Ingres例子,初学者

八荒 发表于: 2019-10-13   最后更新时间: 2019-10-13 22:14:35   1,351 游览

我想部署Ingres实现nodeport,但我不知道该怎么做。

我尝试在Google和百度上找例子,但例子都太难理解了。

发表于 2019-10-13

这是一个最简单的示例了,使用nginxdemos/ello的docker映像:

$docker run -p 80:80 -d nginxdemos/hello    
...
$curl -I http://localhost

HTTP/1.1 200 OK
Server: nginx/1.13.8
Date: Tue, 08 Oct 2019 06:14:52 GMT
Content-Type: text/html
Connection: keep-alive
Expires: Tue, 08 Oct 2019 06:14:51 GMT
Cache-Control: no-cache

这是后端Deployment:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-backend
  namespace: java2days
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx-server
  template:
    metadata:
      labels:
        app: nginx-server
    spec:
      containers:
        - name: nginx-server
          image: nginxdemos/hello
          ports:
            - containerPort: 80
              name: server-port
          livenessProbe:
            httpGet:
              path: /
              port: 80
            initialDelaySeconds: 15
            periodSeconds: 15
            timeoutSeconds: 3
          readinessProbe:
            httpGet:
              path: /
              port: 80
            initialDelaySeconds: 15
            periodSeconds: 15
            timeoutSeconds: 3

查看,确认pod运行正常,有2个nginx服务器的pod:

$kubectl get pods

NAME                            READY   STATUS    RESTARTS   AGE
nginx-backend-dfcdb9797-dnx7x   1/1     Running   0          21m
nginx-backend-dfcdb9797-pnrhn   1/1     Running   0          21m

最后,创建一个NodePort服务:

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
  namespace: java2days
spec:
  ports:
    - port: 80
      protocol: TCP
      targetPort: 80
      name: http
  selector:
    app: nginx-server
  type: NodePort

注意selector,它必须要与后端服务匹配。 现在开始创建ingress。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: nginx-ingress
  namespace: java2days
spec:
  rules:
    - http:
        paths:
          - backend:
              serviceName: nginx-service
              servicePort: 80
            path: /*

你必须等待大约5到10分钟,直到Ingress设置IP地址。就完成了,就像这样:

$kubectl get ingress

NAME            HOSTS   ADDRESS         PORTS   AGE
nginx-ingress   *       x.y.z.p         80      15m

然后你就可以访问了

$curl -I http://x.y.z.p

HTTP/1.1 200 OK

可以正常访问了。 如果在游览器中多次刷新,则会看到服务器ID变化,说明负载均衡也ok了。

你的答案

查看k8s相关的其他问题或提一个您自己的问题