Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 通过TCP连接在没有服务的情况下连接同一集群中的Kubernetes吊舱_Sockets_Kubernetes_Tcp - Fatal编程技术网

Sockets 通过TCP连接在没有服务的情况下连接同一集群中的Kubernetes吊舱

Sockets 通过TCP连接在没有服务的情况下连接同一集群中的Kubernetes吊舱,sockets,kubernetes,tcp,Sockets,Kubernetes,Tcp,我一直在试图找到不同的方法来连接库伯内特斯吊舱。我最初使用服务和节点端口连接连接了两个POD。现在我正试图使用tcp套接字来实现这一点 kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES f1 1/1 Running 4 2d18h 10.233.90.120

我一直在试图找到不同的方法来连接库伯内特斯吊舱。我最初使用服务和节点端口连接连接了两个POD。现在我正试图使用tcp套接字来实现这一点

kubectl get pod -o wide
NAME   READY   STATUS    RESTARTS   AGE     IP              NODE    NOMINATED NODE   READINESS GATES
f1     1/1     Running   4          2d18h   10.233.90.120   node1   <none>           <none>
f2     1/1     Running   4          2d18h   10.233.90.117   node1   <none>           <none>
我还附加了f1.yaml和f2.yaml文件

f1.yaml

apiVersion: v1
kind: Pod
metadata:
  name: f1
  labels:
    role: f1
spec:
  containers:
    - name: web
      image: nginx
      ports:
        - name: web
          containerPort: 80
          protocol: TCP
f2.yaml

apiVersion: v1
kind: Pod
metadata:
  name: f2
  labels:
    role: f2
spec:
  containers:
    - name: f2
      image: "gcr.io/google-samples/hello-go-gke:1.0"
      ports:
        - name: web
          containerPort: 80
          protocol: TCP
服务器.c

  #include <stdio.h> 
#include <netdb.h> 
#include <netinet/in.h> 
#include <stdlib.h> 
#include <string.h> 
#include <sys/socket.h> 
#include <sys/types.h> 
#define MAX 80 
#define PORT 8080 
#define SA struct sockaddr 
  
// Function designed for chat between client and server. 
void func(int sockfd) 
{ 
    char buff[MAX]; 
    int n; 
    // infinite loop for chat 
    for (;;) { 
        bzero(buff, MAX); 
  
        // read the message from client and copy it in buffer 
        read(sockfd, buff, sizeof(buff)); 
        // print buffer which contains the client contents 
        printf("From client: %s\t To client : ", buff); 
        bzero(buff, MAX); 
        n = 0; 
        // copy server message in the buffer 
        while ((buff[n++] = getchar()) != '\n') 
            ; 
  
        // and send that buffer to client 
        write(sockfd, buff, sizeof(buff)); 
  
        // if msg contains "Exit" then server exit and chat ended. 
        if (strncmp("exit", buff, 4) == 0) { 
            printf("Server Exit...\n"); 
            break; 
        } 
    } 
} 
  
// Driver function 
int main() 
{ 
    int sockfd, connfd, len; 
    struct sockaddr_in servaddr, cli; 
  
    // socket create and verification 
    sockfd = socket(AF_INET, SOCK_STREAM, 0); 
    if (sockfd == -1) { 
        printf("socket creation failed...\n"); 
        exit(0); 
    } 
    else
        printf("Socket successfully created..\n"); 
    bzero(&servaddr, sizeof(servaddr)); 
  
    // assign IP, PORT 
    servaddr.sin_family = AF_INET; 
//    servaddr.sin_addr.s_addr = htonl(INADDR_ANY); 
    servaddr.sin_addr.s_addr = htonl("f1"); 
    servaddr.sin_port = htons(PORT); 
  
    // Binding newly created socket to given IP and verification 
    if ((bind(sockfd, (SA*)&servaddr, sizeof(servaddr))) != 0) { 
        printf("socket bind failed...\n"); 
        exit(0); 
    } 
    else
        printf("Socket successfully binded..\n"); 
  
    // Now server is ready to listen and verification 
    if ((listen(sockfd, 5)) != 0) { 
        printf("Listen failed...\n"); 
        exit(0); 
    } 
    else
        printf("Server listening..\n"); 
    len = sizeof(cli); 
  
    // Accept the data packet from client and verification 
    connfd = accept(sockfd, (SA*)&cli, &len); 
    if (connfd < 0) { 
        printf("server acccept failed...\n"); 
        exit(0); 
    } 
    else
        printf("server acccept the client...\n"); 
  
    // Function for chatting between client and server 
    func(connfd); 
  
    // After chatting close the socket 
    close(sockfd); 
} 
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#定义最大值80
#定义端口8080
#定义SA结构sockaddr
//为客户端和服务器之间的聊天而设计的功能。
无效函数(int-sockfd)
{ 
字符buff[MAX];
int n;
//无限循环聊天
对于(;){
bzero(buff,MAX);
//从客户端读取消息并将其复制到缓冲区中
读取(sockfd、buff、sizeof(buff));
//包含客户端内容的打印缓冲区
printf(“从客户端:%s\t到客户端:”,buff);
bzero(buff,MAX);
n=0;
//在缓冲区中复制服务器消息
而((buff[n++]=getchar())!='\n')
; 
//并将该缓冲区发送到客户端
写入(sockfd、buff、sizeof(buff));
//如果消息包含“退出”,则服务器退出并结束聊天。
如果(strncmp(“退出”,buff,4)=0{
printf(“服务器退出…\n”);
打破
} 
} 
} 
//驱动函数
int main()
{ 
int sockfd、connfd、len;
servaddr中的struct sockaddru,cli;
//套接字创建和验证
sockfd=套接字(AF_INET,SOCK_STREAM,0);
如果(sockfd==-1){
printf(“套接字创建失败…\n”);
出口(0);
} 
其他的
printf(“套接字已成功创建..\n”);
bzero(&servaddr,sizeof(servaddr));
//分配IP、端口
servaddr.sin_family=AF_INET;
//servaddr.sin\u addr.s\u addr=htonl(INADDR\u ANY);
servaddr.sin_addr.s_addr=htonl(“f1”);
servaddr.sinu端口=htons(端口);
//将新创建的套接字绑定到给定的IP和验证
如果((bind(sockfd,(SA*)&servaddr,sizeof(servaddr)))!=0{
printf(“套接字绑定失败…\n”);
出口(0);
} 
其他的
printf(“套接字成功绑定..\n”);
//现在服务器已准备好侦听和验证
如果((听(sockfd,5))!=0{
printf(“侦听失败…\n”);
出口(0);
} 
其他的
printf(“服务器侦听..\n”);
len=sizeof(cli);
//接受来自客户端的数据包并进行验证
connfd=accept(sockfd,(SA*)&cli和len);
如果(connfd<0){
printf(“服务器访问失败…\n”);
出口(0);
} 
其他的
printf(“服务器接受客户端…\n”);
//客户端和服务器之间的聊天功能
func(connfd);
//聊天结束后,关闭插座
关闭(sockfd);
} 
客户c

#include <netdb.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <sys/socket.h> 
#define MAX 80 
#define PORT 8080
#define SA struct sockaddr 
void func(int sockfd) 
{ 
    char buff[MAX]; 
    int n; 
    for (;;) { 
        bzero(buff, sizeof(buff)); 
        printf("Enter the string : "); 
        n = 0; 
        while ((buff[n++] = getchar()) != '\n') 
            ; 
        write(sockfd, buff, sizeof(buff)); 
        bzero(buff, sizeof(buff)); 
        read(sockfd, buff, sizeof(buff)); 
        printf("From Server : %s", buff); 
        if ((strncmp(buff, "exit", 4)) == 0) { 
            printf("Client Exit...\n"); 
            break; 
        } 
    } 
} 

int main() 
{ 
    int sockfd, connfd; 
    struct sockaddr_in servaddr, cli; 

    // socket create and varification 
    sockfd = socket(AF_INET, SOCK_STREAM, 0); 
    if (sockfd == -1) { 
        printf("socket creation failed...\n"); 
        exit(0); 
    } 
    else
        printf("Socket successfully created..\n"); 
    bzero(&servaddr, sizeof(servaddr)); 

    // assign IP, PORT 
    servaddr.sin_family = AF_INET; 
//  servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
    servaddr.sin_addr.s_addr = inet_addr("f2"); 
    servaddr.sin_port = htons(PORT); 

    // connect the client socket to server socket 
    if (connect(sockfd, (SA*)&servaddr, sizeof(servaddr)) != 0) { 
        printf("connection with the server failed...\n"); 
        exit(0); 
    } 
    else
        printf("connected to the server..\n"); 

    // function for chat 
    func(sockfd); 

    // close the socket 
    close(sockfd); 
} 
#包括
#包括
#包括
#包括
#包括
#定义最大值80
#定义端口8080
#定义SA结构sockaddr
无效函数(int-sockfd)
{ 
字符buff[MAX];
int n;
对于(;){
bzero(buff,sizeof(buff));
printf(“输入字符串:”);
n=0;
而((buff[n++]=getchar())!='\n')
; 
写入(sockfd、buff、sizeof(buff));
bzero(buff,sizeof(buff));
读取(sockfd、buff、sizeof(buff));
printf(“来自服务器:%s”,buff);
如果((strncmp(buff,“exit”,4))==0{
printf(“客户端退出…\n”);
打破
} 
} 
} 
int main()
{ 
int sockfd,connfd;
servaddr中的struct sockaddru,cli;
//套接字创建和变体
sockfd=套接字(AF_INET,SOCK_STREAM,0);
如果(sockfd==-1){
printf(“套接字创建失败…\n”);
出口(0);
} 
其他的
printf(“套接字已成功创建..\n”);
bzero(&servaddr,sizeof(servaddr));
//分配IP、端口
servaddr.sin_family=AF_INET;
//servaddr.sin_addr.s_addr=inet_addr(“127.0.0.1”);
servaddr.sin_addr.s_addr=inet_addr(“f2”);
servaddr.sinu端口=htons(端口);
//将客户端套接字连接到服务器套接字
如果(connect(sockfd,(SA*)&servaddr,sizeof(servaddr))!=0{
printf(“与服务器的连接失败…\n”);
出口(0);
} 
其他的
printf(“连接到服务器..\n”);
//聊天功能
func(sockfd);
//合上插座
关闭(sockfd);
} 

如果您想将一个Pod连接到另一个Pod,您可以使用它们的内部Pod IP(
10.233.90.120
10.233.90.117
)或它们的Pod名称
f1
f2
(应该自动通过DNS解析到它们的内部Pod IP)。你不应该对此有任何问题。你不需要任何服务。如果他们无法连接,请添加日志和他们运行的代码

如果要从Kubernetes群集外部连接到POD,则需要使用以下方式公开它们:

  • 节点端口/负载平衡器服务或
  • 库贝特港前进

您应该始终能够建立TCP套接字连接。

我在这里遵循了服务器和客户端代码:。在服务器中,我输入了10.233.90.120,在客户端,我将IP更改为10.233.90.117。但是它显示了绑定失败的错误。这些pod在同一个集群中。另外,我再次运行了命令kubectl get pod-o wide。IPS更改为10.233.90.135和10.233.90.134。这正常吗?这可能是绑定失败的原因吗?
#include <netdb.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <sys/socket.h> 
#define MAX 80 
#define PORT 8080
#define SA struct sockaddr 
void func(int sockfd) 
{ 
    char buff[MAX]; 
    int n; 
    for (;;) { 
        bzero(buff, sizeof(buff)); 
        printf("Enter the string : "); 
        n = 0; 
        while ((buff[n++] = getchar()) != '\n') 
            ; 
        write(sockfd, buff, sizeof(buff)); 
        bzero(buff, sizeof(buff)); 
        read(sockfd, buff, sizeof(buff)); 
        printf("From Server : %s", buff); 
        if ((strncmp(buff, "exit", 4)) == 0) { 
            printf("Client Exit...\n"); 
            break; 
        } 
    } 
} 

int main() 
{ 
    int sockfd, connfd; 
    struct sockaddr_in servaddr, cli; 

    // socket create and varification 
    sockfd = socket(AF_INET, SOCK_STREAM, 0); 
    if (sockfd == -1) { 
        printf("socket creation failed...\n"); 
        exit(0); 
    } 
    else
        printf("Socket successfully created..\n"); 
    bzero(&servaddr, sizeof(servaddr)); 

    // assign IP, PORT 
    servaddr.sin_family = AF_INET; 
//  servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
    servaddr.sin_addr.s_addr = inet_addr("f2"); 
    servaddr.sin_port = htons(PORT); 

    // connect the client socket to server socket 
    if (connect(sockfd, (SA*)&servaddr, sizeof(servaddr)) != 0) { 
        printf("connection with the server failed...\n"); 
        exit(0); 
    } 
    else
        printf("connected to the server..\n"); 

    // function for chat 
    func(sockfd); 

    // close the socket 
    close(sockfd); 
}