[英]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.