无法使用 KIND 访问网页 hello-kubernetes,如何让 Kind 绑定到 localhost:80?
Can't get to web page hello-kubernetes using KIND, how do I get Kind to bind to localhost:80?
由于 kind 的嵌套性质,我不知道要使用哪个端口或如何配置它,以便我只能键入 localhost 来访问它。
亲切的 YAML:
kind: Cluster
apiVersion: kind.sigs.k8s.io/v1alpha3
nodes:
- role: control-plane
- role: worker
- role: worker
- role: worker
- role: worker
也尝试过:
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
extraPortMappings:
- containerPort: 8080
hostPort: 80
protocol: TCP
- role: worker
- role: worker
- role: worker
- role: worker
启动节点:kind create cluster --config ~/go/kindconfigs/kind-config.yaml
作业 YAML:
# hello-kubernetes.yaml
apiVersion: v1
kind: Service
metadata:
name: hello-kubernetes
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 8080
selector:
app: hello-kubernetes
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-kubernetes
spec:
replicas: 3
selector:
matchLabels:
app: hello-kubernetes
template:
metadata:
labels:
app: hello-kubernetes
spec:
containers:
- name: hello-kubernetes
image: paulbouwer/hello-kubernetes:1.8
ports:
- containerPort: 8080
运行它:kubectl apply -f ~/go/kindconfigs/hello-kubernetes.yaml
参考 docs 你需要使用 extraPortMappings
来允许本地主机通过端口 80
向 hello-kubernetes 发出请求
cat <<EOF | kind create cluster --config=-
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
extraPortMappings:
- containerPort: 8080
hostPort: 80
protocol: TCP
EOF
部署也需要更改
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-kubernetes
spec:
replicas: 3
selector:
matchLabels:
app: hello-kubernetes
template:
metadata:
labels:
app: hello-kubernetes
spec:
containers:
- name: hello-kubernetes
image: paulbouwer/hello-kubernetes:1.8
securityContext:
capabilities:
drop:
- ALL
add:
- NET_BIND_SERVICE
ports:
- containerPort: 8080
hostPort: 80
通过以上配置,您可以使用 localhost:80
访问 hello-kubernetes 应用程序。
注1:如果没有以上配置,您可以通过NODEIP:NODEPORT
访问它
得到NODEIP
kubectl get nodes -o wide
得到NODEPORT
kubectl describe svc hello-kubernetes
Node-2:LoadBalancer
类型服务仅适用于受支持的云环境。这就是为什么在您系统本地的 kind 集群 运行 中,您需要使用 NODEIP
和 NODEPORT
来访问它。
注 3:您可以尝试使用 metallb 来使 LoadBalancer
类型的服务正常工作。这应该可以解决 EXTERNAL-IP
未决问题。
由于 kind 的嵌套性质,我不知道要使用哪个端口或如何配置它,以便我只能键入 localhost 来访问它。
亲切的 YAML:
kind: Cluster
apiVersion: kind.sigs.k8s.io/v1alpha3
nodes:
- role: control-plane
- role: worker
- role: worker
- role: worker
- role: worker
也尝试过:
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
extraPortMappings:
- containerPort: 8080
hostPort: 80
protocol: TCP
- role: worker
- role: worker
- role: worker
- role: worker
启动节点:kind create cluster --config ~/go/kindconfigs/kind-config.yaml
作业 YAML:
# hello-kubernetes.yaml
apiVersion: v1
kind: Service
metadata:
name: hello-kubernetes
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 8080
selector:
app: hello-kubernetes
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-kubernetes
spec:
replicas: 3
selector:
matchLabels:
app: hello-kubernetes
template:
metadata:
labels:
app: hello-kubernetes
spec:
containers:
- name: hello-kubernetes
image: paulbouwer/hello-kubernetes:1.8
ports:
- containerPort: 8080
运行它:kubectl apply -f ~/go/kindconfigs/hello-kubernetes.yaml
参考 docs 你需要使用 extraPortMappings
来允许本地主机通过端口 80
cat <<EOF | kind create cluster --config=-
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
extraPortMappings:
- containerPort: 8080
hostPort: 80
protocol: TCP
EOF
部署也需要更改
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-kubernetes
spec:
replicas: 3
selector:
matchLabels:
app: hello-kubernetes
template:
metadata:
labels:
app: hello-kubernetes
spec:
containers:
- name: hello-kubernetes
image: paulbouwer/hello-kubernetes:1.8
securityContext:
capabilities:
drop:
- ALL
add:
- NET_BIND_SERVICE
ports:
- containerPort: 8080
hostPort: 80
通过以上配置,您可以使用 localhost:80
访问 hello-kubernetes 应用程序。
注1:如果没有以上配置,您可以通过NODEIP:NODEPORT
得到NODEIP
kubectl get nodes -o wide
得到NODEPORT
kubectl describe svc hello-kubernetes
Node-2:LoadBalancer
类型服务仅适用于受支持的云环境。这就是为什么在您系统本地的 kind 集群 运行 中,您需要使用 NODEIP
和 NODEPORT
来访问它。
注 3:您可以尝试使用 metallb 来使 LoadBalancer
类型的服务正常工作。这应该可以解决 EXTERNAL-IP
未决问题。