无法使用 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 未决问题。