简体   繁体   English

Kubernetes 入口 IP 设置为 docker0 ip

[英]Kubernetes ingress IP is set to docker0 ip

I'm trying to use the kubernetes ingress resource on bare metal with no cloud provider.我正在尝试在没有云提供商的裸机上使用 kubernetes 入口资源。

I created an ingress resource:我创建了一个入口资源:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: nginx
spec:
  rules:
  - host: foobar.com
    http:
      paths:
      - path: /foo
        backend:
          serviceName: echoheaders-x
          servicePort: 80
      - path: /
        backend:
          serviceName: frontend
          servicePort: 80

however, when I view the ingress, I get this IP:但是,当我查看入口时,我得到了这个 IP:

[root@kubemaster]# kubectl get ing
NAME      HOSTS       ADDRESS      PORTS     AGE
nginx     foobar.com   172.17.0.1   80        12m

That IP address seems to correspond with the docker0 IP address on all my kubelet nodes.该 IP 地址似乎与我所有 kubelet 节点上的 docker0 IP 地址相对应。

Is there a way to set this IP?有没有办法设置这个IP? All the tutorial's I've read seem to have this IP be routable.我读过的所有教程似乎都有这个 IP 是可路由的。

Here's my nginx-controller yaml:这是我的 nginx 控制器 yaml:

---
apiVersion: v1
kind: ReplicationController
metadata:
  name: nginx-ingress-controller
  labels:
    k8s-app: nginx-ingress-lb
spec:
  replicas: 1
  selector:
    k8s-app: nginx-ingress-lb
  template:
    metadata:
      labels:
        k8s-app: nginx-ingress-lb
        name: nginx-ingress-lb
    spec:
      terminationGracePeriodSeconds: 60
      containers:
      - image: gcr.io/google_containers/nginx-ingress-controller:0.8.3
        name: nginx-ingress-lb
        imagePullPolicy: Always
        readinessProbe:
          httpGet:
            path: /healthz
            port: 10254
            scheme: HTTP
        livenessProbe:
          httpGet:
            path: /healthz
            port: 10254
            scheme: HTTP
          initialDelaySeconds: 10
          timeoutSeconds: 1
        # use downward API
        env:
          - name: POD_NAME
            valueFrom:
              fieldRef:
                fieldPath: metadata.name
          - name: POD_NAMESPACE
            valueFrom:
              fieldRef:
                fieldPath: metadata.namespace
        ports:
        - containerPort: 80
          hostPort: 80
        - containerPort: 443
          hostPort: 443
        # we expose 18080 to access nginx stats in url /nginx-status
        # this is optional
        - containerPort: 18080
          hostPort: 18080
        args:
        - /nginx-ingress-controller
        - --default-backend-service=$(POD_NAMESPACE)/default-http-backend
        - --nginx-configmap=$(POD_NAMESPACE)/nginx-ingress-controller

The issue here was the kubelet configuration.这里的问题是 kubelet 配置。 By default, the kubelet will listen on 0.0.0.0 and because docker0 is the first available address, it grabbed docker0 's IP.默认情况下,kubelet 将侦听0.0.0.0并且因为docker0是第一个可用地址,所以它会抓取docker0的 IP。

I added the following to the kubelet config:我在 kubelet 配置中添加了以下内容:

--address=<actualip> --node-ip=<actualip>

And it registered correctly.它注册正确。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM