如何让我的第一个入口在裸机节点IP上工作? [英] How to make My First ingress work on baremetal NodeIP?

查看:18
本文介绍了如何让我的第一个入口在裸机节点IP上工作?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有Pod:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-app
  namespace: dev
spec:
  selector:
    matchLabels:
      app: hello
  replicas: 3
  template:
    metadata:
      labels:
        app: hello
    spec:
      containers:
      - name: hello
        image: "gcr.io/google-samples/hello-app:2.0"

提供服务:

---
apiVersion: v1
kind: Service
metadata:
  name: hello-service
  namespace: dev
  labels:
    app: hello
spec:
  type: ClusterIP
  selector:
    app: hello
  ports:
  - port: 80
    targetPort: 8080
    protocol: TCP

检查:

---
apiVersion: v1
kind: Service
metadata:
  name: hello-node-service
  namespace: dev
spec:
  type: NodePort
  selector:
    app: hello
  ports:
    - port: 80
      targetPort: 8080

$kubectl Get svc-n dev

NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
hello-node-service   NodePort    10.233.3.50     <none>        80:31263/TCP   9h
hello-service        ClusterIP   10.233.45.159   <none>        80/TCP         44h

$curl-ihttp://cluster.local:31263

HTTP/1.1 200 OK
Date: Sat, 11 Sep 2021 07:31:28 GMT
Content-Length: 66
Content-Type: text/plain; charset=utf-8

我已验证该服务正在工作。

使用NodeIP安装入口(https://kubernetes.github.io/ingress-nginx/deploy/):

kubectl应用-fhttps://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.0.0/deploy/static/provider/baremetal/deploy.yaml

$kubectl Get Pods-n ingress-nginx-l app.kubernetes.io/name=inress-nginx--watch

NAME                                       READY   STATUS      RESTARTS   AGE
ingress-nginx-admission-create-7gsft       0/1     Completed   0          10h
ingress-nginx-admission-patch-qj57b        0/1     Completed   1          10h
ingress-nginx-controller-8cf5559f8-mh6fr   1/1     Running     0          10h

$kubectl Get svc-n Enress-nginx

NAME                                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
ingress-nginx-controller             NodePort    10.233.52.118   <none>        80:30377/TCP,443:31682/TCP   10h
ingress-nginx-controller-admission   ClusterIP   10.233.51.175   <none>        443/TCP                      10h

检查:

$curl-ihttp://cluster.local:30377/healthz

HTTP/1.1 200 OK
Date: Sat, 11 Sep 2021 07:39:04 GMT
Content-Type: text/html
Content-Length: 0
Connection: keep-alive

进入:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
   name: ingress-hello
   namespace: dev
spec:
  rules:
  - host: cluster.local
    http:
      paths:
      - backend:
          service:
            name: hello-service
            port:
              number: 80
        path: "/hello"
        pathType: Prefix

检查:

$ curl -I http://cluster.local:30377/hello
HTTP/1.1 404 Not Found
Date: Sat, 11 Sep 2021 07:40:43 GMT
Content-Type: text/html
Content-Length: 146
Connection: keep-alive

它不起作用。我花了几天时间,尝试将ExternalIP添加到入口控制器。

您能告诉我谁有设置入口的经验吗,我做错了什么? =(

有关群集的信息: $kubectl Get Enress-n dev

NAME            CLASS    HOSTS           ADDRESS   PORTS   AGE
ingress-hello   <none>   cluster.local             80      10h

$kubectl获取节点

NAME               STATUS   ROLES                  AGE   VERSION
kuber-ingress-01   Ready    worker                 10d   v1.21.3
kuber-master1      Ready    control-plane,master   10d   v1.21.3
kuber-master2      Ready    control-plane,master   10d   v1.21.3
kuber-master3      Ready    control-plane,master   10d   v1.21.3
kuber-node-01      Ready    worker                 10d   v1.21.3
kuber-node-02      Ready    worker                 10d   v1.21.3
kuber-node-03      Ready    worker                 10d   v1.21.3

库存:

kuber-master1 10.0.57.31
kuber-master2 10.0.57.32
kuber-master3 10.0.57.33
kuber-node-01 10.0.57.34
kuber-node-02 10.0.57.35
kuber-node-03 10.0.57.36
kuber-ingress-01 10.0.57.30

$ping cluster.local

PING cluster.local (10.0.57.30) 56(84) bytes of data.
64 bytes from ingress.example.com (10.0.57.30): icmp_seq=1 ttl=62 time=0.603 ms

推荐答案

解决方案是将以下内容添加到入口注释中。 然后,入口控制器开始看到这些DNS地址。

  annotations:
      kubernetes.io/ingress.class: nginx
      nginx.ingress.kubernetes.io/ssl-redirect: "false"
      nginx.ingress.kubernetes.io/use-regex: "true"
      nginx.ingress.kubernetes.io/rewrite-target: /$1

另外,为方便起见,将路径:/更改为正则表达式:

            - path: /v1(/|$)(.*)

这篇关于如何让我的第一个入口在裸机节点IP上工作?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆